簡體   English   中英

如何:避免插入相關實體?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM