最佳答案
我最近一直在使用实体框架4,对于什么时候使用 ObjectSet 附件和 AddObject,我有点困惑。
据我所知:
所以,如果我是 创建一个新的 Person我就这么做。
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
如果我是 修改现有的 Person,我会这样做:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
请记住,这是一个 很简单示例。实际上,我使用的是 Pure POCO (不生成代码) ,Repository 模式(不处理 ctx)。人员)和工作单位(不要处理 ctx。保存更改)。但是“在掩护之下”,以上就是在我的实现中发生的事情。
现在,我的问题 -我还没有找到使用 接上的场景。
我错过了什么? 我们什么时候需要使用附加?
剪辑
只是为了澄清,我正在寻找 例子的时候使用附加超过添加对象(或反之亦然)。
编辑2
下面的答案是正确的(我接受) ,但认为我会添加另一个例子,附加将是有用的。
在上面的 修改现有的 Person示例中,实际执行了两个查询。
一个用于检索 Person (. SingleOrDefault) ,另一个用于执行 UPDATE (. SaveChanges)。
如果(出于某种原因) ,我已经知道系统中存在“ Joe Bloggs”,为什么要做额外的查询来获得他第一?我可以这么做:
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();
这将导致只执行一个 UPDATE 语句。