您将如何执行此操作(伪代码):product1.Orders.AddRange(product2.Orders);
但是,函数“AddRange”不存在,那么如何将EntityCollection“Orders”中的所有项目从product2复制到product1?
应该很简单,但事实并非如此......
最佳答案
问题比你想象的要深。
您的 foreach
尝试失败,因为当您调用 product1.Orders.Add
时,实体会从 product2.Orders
中删除,从而呈现现有的枚举器无效,这会导致您看到的异常。
那么为什么实体会从 produc2 中删除呢?嗯,看起来很简单:因为订单一次只能属于一种产品。 Entity Framework 通过执行这样的规则来处理数据完整性。
如果我理解正确的话,您的目标实际上是复制订单从一种产品到另一种产品,对吗?
如果是这样,那么您必须在 foreach
循环中显式创建每个订单的副本,然后将该副本添加到 product1
。
出于某种对我来说相当模糊的原因,没有自动方法来创建实体的副本。因此,您几乎必须手动一一复制所有 Order 的属性。您可以通过将此逻辑合并到 Order 类本身中来使代码看起来更简洁 - 创建一个名为 Clone() 的方法来复制所有属性。不过,请确保不要复制“所有者产品引用”属性,因为您的全部目的是为其提供另一个所有者产品,不是吗?
无论如何,如果有不清楚的地方,请随时提出更多问题。祝你好运。
- 费奥多尔
关于c# - 从 EntityCollection 复制到 EntityCollection 不可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663414/