![](/img/trans.png)
[英]How to avoid multiple db calls for inserting an object with related entities in EF Core
[英]How to: Avoid Inserting Related Entities?
我有這個架構:
http://img602.imageshack.us/img602/6978/schemac.png
我想將帶有OrderItems的Order插入數據庫,所以我寫了這個方法:
public void SaveOrder(Order order)
{
using (var repository = new StoreEntities())
{
// Add order.
repository.Orders.AddObject(order);
// Add order items.
foreach (OrderItem orderItem in order.OrderItems)
{
repository.OrderItems.AddObject(orderItem);
}
repository.SaveChanges();
}
}
一切都插入正確,除了也插入了新的產品記錄 ,這不是我想要的。
我想要的是插入Order及其OrderItems,而無需進一步深入對象圖。 如何實現?
非常感謝您的任何幫助,謝謝。
在訂單上調用AddObject時,對象圖中的所有項目都標記為已插入。 因此,您必須將產品標記為未更改:
public void SaveOrder(Order order)
{
using (var repository = new StoreEntities())
{
// Add order - calling add object marks Order and all entities in its
// object graph as Added - they will be inserted to database
repository.Orders.AddObject(order);
// You don't need to add order items because they should be added together
// with order
// But you don't want to insert Products again, do you?
// So you have to say that Products are not Added but Unchanged
foreach (var orderItem in order.OrderItems)
{
// Not sure how to do it with your repository but with ObjectContext
// you can do
// context.ObjectStateManager.ChangeObjectState(orderItem.Product,
// EntityState.Unchanged);
}
}
}
我的EF經驗幾乎為零,但是看來您的問題可能是您的產品已保存到新的上下文中。 如果您添加了以下內容,它會有所幫助:
repository.Attach(orderItem.Product);
就在AddObject調用之前?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.