2011-02-07 5 views
5

Câu hỏi: mã LINQ-to-Entity là gì để chèn một đơn đặt hàng cho một khách hàng cụ thể?Làm cách nào để sử dụng LINQ-to-Entities để chèn dữ liệu vào một bảng cụ thể?

enter image description here

Cập nhật

Đây là một giải pháp (xem một trong những câu trả lời dưới đây gửi cho một giải pháp sạch hơn nhiều):

using (OrderDatabase ctx = new OrderDatabase()) 
{ 
    // Populate the individual tables. 

    // Comment in this next line to create a new customer/order combination. 
    // Customer customer = new Customer() { FirstName = "Bobby", LastName = "Davro" }; 
    // Comment in this line to add an order to an existing customer. 
    var customer = ctx.Customers.Where(c => c.FirstName == "Bobby").FirstOrDefault(); 

    Order order = new Order() { OrderQuantity = "2", OrderDescription = "Widgets" }; 

    // Insert the individual tables correctly into the hierarchy. 
    customer.Orders.Add(order); 

    // Add the complete object into the entity. 
    ctx.Customers.AddObject(customer); 

    // Insert into the database. 
    ctx.SaveChanges();       
} 
+0

Tất nhiên, tôi có thể sử dụng ADO.NET để thực hiện công việc - nhưng tôi không muốn "gây ô nhiễm" mô hình của mình bằng cách xử lý khóa chính/khóa ngoài. Lưu ý rằng đoạn mã trên không có khóa chính/khóa ngoài - LINQ to Entities xử lý điều này cho tôi. – Contango

Trả lời

3

Mã của bạn không phải là xa . Chỉ cần thay đổi dòng thứ hai của bạn để đọc như sau:

Customer customer = ctx.Customer.FirstOrDefault(c => c.FirstName == "Bobby"); 
if (customer != null) 
{ 
    //... 

Chỉ cần thay thế c.FirstName == "Bobby" với một cái gì đó mạnh mẽ có thể xác định được khách hàng bạn đang tìm kiếm (ví dụ c.Id == customerID nếu bạn đã biết những gì các ID là).

+1

Rực rỡ, điều này hoạt động độc đáo. Tôi đã phải trả lời câu trả lời cho bạn khi bạn trả lời đúng đầu tiên. Rất rất cảm ơn! – Contango

+0

@Gravitas: Rất vui được trợ giúp! –

0

L2E hiện không hỗ trợ các hoạt động dựa trên thiết lập (cập nhật mà không chọn). Xem Use linq to generate direct update without select

+1

Tôi không nghĩ rằng anh ấy yêu cầu cập nhật mà không chọn. Ông đề cập đến một truy vấn LINQ để lấy đúng khách hàng đầu tiên. –

3

Lưu ý rằng Đơn đặt hàng có thuộc tính Khách hàng. Bạn không phải thêm Đơn đặt hàng cho Khách hàng - bạn có thể thực hiện theo cách khác. Vì vậy, thay vì tạo Khách hàng mới, hãy nhờ Khách hàng sử dụng LINQ, sau đó thêm khách hàng vào Đơn hàng mới của bạn.

using (OrderDatabase ctx = new OrderDatabase()) 
{ 
    ctx.AddOrder(new Order() 
    { 
     OrderQuantity = 2, 
     OrderDescription = "Widgets", 
     Customer = ctx.Customers.First<Customer>(c => c.CustomerId == yourId) 
    }); 
    ctx.SaveChanges(); 
} 
+1

Lưu ý rằng bạn có thể thay thế điều kiện để chọn Khách hàng với bất kỳ điều kiện liên quan nào khác; bạn không cần yourId để có CustomerId nếu bạn muốn tìm kiếm trên các tiêu chí khác. – Andrew

+0

Tuyệt vời, mã này rất sạch sẽ, nhờ mẹo. – Contango

1

Tôi không hiểu chính xác vấn đề là gì.

var mycustomer = context.Customers.Where(x => x.id == 100).FirstOrDefault(); 
if(mycustomer != null) 
{ 
    mycustomer.Orders.Add(myorder); 
} 
context.SaveChanges(); 
+0

Brilliant - điều này cũng hoạt động độc đáo! Rất rất cảm ơn. – Contango