我正在使用最新版本的EF,并试图找出如何制作一个对象的副本并将其作为新记录插入,但所以指向不同对象的对象的所有属性仍然指向复制后的那些对象。
所以我说一个'软件'对象有一个版本,有作者和公司属性,我复制这个软件并更新版本,作者和公司保持不变,但我有一个新的记录为了它。所以从技术上讲,如果需要,我可以回滚到以前的版本。
当前获取对象,更新它并将其作为新对象插入会创建预期的链接对象的新版本。我知道你可以将对象附加到上下文中,这似乎是一种正确的方法,但是当你想要一个新的记录时,不能确定它是如何工作的。
谢谢
答案 0 :(得分:4)
当您更新对象时,在调用SaveChanges()之前,您可以修改要添加的EntityState,这样EF就会将实体添加为新实体,而不是更新现有实体。
如果您有DbContext:
YourContext.Entry(YourEntity).State = EntityState.Added;
如果您有ObjectContext:
YourContext.ObjectStateManager.ChangeObjectState(YourEntity, EntityState.Added);