我有一个db-first
实体框架应用程序和以下关联:
Customer * <-> 1 Country
Machine * <-> 1 Customer
到目前为止,一切都很好。现在问题是:
我有另一个与机器和客户相关联的课程Condition
:
Condition * <-> 1 Customer
Condition * <-> 1 Machine
在一个特殊实体中Condition.Machine.Customer.Country
与Condition.Customer.Country
是同一个实体,我得到一条带有消息的InvalidOperationException
ObjectStateManager
中已存在具有相同键的对象
当我致电
时会出现此异常db.Entry(condition).State = EntityState.Modified;
同样,Country
Entites不变,我得到了这个例外。
我现在如何存储Condition
实体?
答案 0 :(得分:0)
如果您在断开连接的上下文中工作,则不能依赖EF TrackChanges机制,并且通过图形关系,您保存的上下文无法知道子项是新的/更新/不更改。 当您保存更改时,您将收到您看到的错误,因为该子实体已经存在且EF正在尝试再次添加它。
Julie Lerman有一个方法涉及管理您自己的修改状态,以便您可以根据需要正确地附加/分离实体。
这将重新加载您要保存的子实体(不跟踪),将其从父项中删除,然后允许您将父项的实体状态标记为“已修改”,并重新添加该子项(如果有)。 / p>