将实体从一个上下文传输到另一个上下文时,添加对象和附加有什么不同

时间:2011-12-13 07:32:29

标签: entity-framework objectcontext

如果我首先使用数据库来构建上下文,并将该上下文实例化两次。我想从第一个上下文查询特定实体并将其添加到第二个上下文,使用AddObject和Attach之间有什么不同。 例如

Student stu = context1.Students.First();
context1.Detach(stu);
context2.Attach(stu);

Student stu = context1.Students.First();
context1.Detach(stu);
context2.Students.AddObject(stu);

他们之间有什么区别? 提前谢谢!

1 个答案:

答案 0 :(得分:4)

Attach方法会将对象或对象图附加到未更改状态。这意味着如果在附加对象后不对对象进行任何修改,则在调用SaveChanges()方法时,EF不会为该对象发出任何更新/删除命令。

但是当你使用AddObject方法时,EF会在SaveChanges()方法中将对象作为新实体插入。

如果context2已连接到其他数据库并且您要复制该实例,则可以使用AddObject。否则使用Attach方法。