gpt4 book ai didi

c# - 如何: Avoid Inserting Related Entities?

转载 作者:行者123 更新时间:2023-11-30 21:17:51 24 4
gpt4 key购买 nike

我有这个模式:

http://img602.imageshack.us/img602/6978/schemac.png

我想在数据库中插入一个带有 OrderItems 的订单,所以我写了这个方法:

    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);
}
}
}

关于c# - 如何: Avoid Inserting Related Entities?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com