2009-07-21 27 views
6
cấu trúc

bảng của tôi là nàythực hành/Cách tốt nhất để xem chi tiết tổng thể/table Chèn đa trong Entity Framework

Orders 
------ 
Id int identity 
OrderDate smalldatetime 
OrderStatusid tinyint 

Products 
-------- 
Id int identity 
Name varchar(50) 

OrderDetails 
------------ 
Id int identity 
OrderId int (fkey) 
ProductId int (fkey) 
Amount decimal 
Rate decimal 

Tôi cố gắng để một hoạt động chèn sử dụng Entity Framework sử dụng mã dưới đây
Đây có phải là cách tốt nhất để làm chèn?
Tôi không hài lòng với cách mà tôi đang nhận được mục sản phẩm đầy đủ từ đối tượng bối cảnh, thay vì có thể chỉ định một giá trị productId đơn giản

using (MyContextEntities ctx = new MyContextEntities()) 
{ 
    Orders newOrder = new Orders() 
    { 
    Name = "Gayle Wynand", 
    OrderDate = DateTime.Now, 
    IsComplete = true, 
    Comments = "test", 
    OrderStatusId = 2, 
    IsActive = true 
    }; 
    OrderDetails ode = new OrderDetails(); 
    ode.Products = ctx.Products.First(p => p.Id == 2); // any other way? 
    ode.Quantity = 2; 
    ode.Rate = 5.2; 
    newOrder.OrderDetails.Add(ode); 

    OrderDetails ode2 = new OrderDetails(); 
    ode2.Products = ctx.Products.First(p => p.Id == 3); // any other way? 
    ode2.Quantity = 3; 
    ode2.Rate =6.5; 
    newOrder.OrderDetails.Add(ode2); 


    ctx.AddToOrders(newOrder); 
    ctx.SaveChanges(); 
} 

Đây có phải là cách chính xác để làm các chi tiết tổng thể chèn hoặc là có một cách tốt hơn/khác.

+0

thiếu 'AddTo ' ... Cảm ơn! – nrod

Trả lời

2

Những gì bạn đang làm bây giờ sẽ hoạt động tốt.

Nếu bạn muốn tránh thực hiện một truy vấn cơ sở dữ liệu khi giao ode.Products, sau đó bạn có thể sử dụng thay thế sau:

// substitute your actual qualified entity set name 
ode.ProductsReference.EntityKey = 
    new EntityKey("MyEntities.ProductsEntitySetName", "Id", 2); 

Đây là nhanh hơn, nhưng ít có thể đọc được. Ngoài ra, các sản phẩm sản phẩm sẽ được null cho đến khi bạn tải nó. Nhưng đối với một chèn, điều này thường là OK.

+0

Và có bất kỳ lối tắt nào để cập nhật dữ liệu chi tiết chính không? –

+0

Tôi không chắc chắn ý bạn là gì. Bạn đang mong đợi loại phím tắt nào? Bạn có thể cụ thể hơn về nhu cầu của mình không? –

+0

Tôi muốn biết làm thế nào tôi sẽ làm chính xác cùng một hành động được thực hiện ở trên, nhưng cho một hoạt động cập nhật. –

1

cách tiếp cận khác sẽ được sử dụng Stub Objects hơn EntityKeys ví dụ:

var product = new Product {ID = 2}; 
ctx.AttachTo("Products", product); 
ode.Product = product; 

vv Là một tiền thưởng thêm mã này sẽ làm việc với các đối tượng POCO quá trong tương lai.

Xem this blog post để biết thêm thông tin về kỹ thuật đó.

+0

Tôi đã thử điều này đầu tiên và thấy rằng khi gọi ctx.SaveChanges() nó cố gắng để chèn ngay cả các sản phẩm –

Các vấn đề liên quan