实体框架4 - AddObject与Attach
我最近一直在使用Entity Framework 4,并且稍微混淆了何时使用ObjectSet.Attach和ObjectSet.AddObject。
根据我的理解:
当实体已存在于系统中时使用“附加”
创建全新实体时使用“AddObject”
所以,如果我正在创建一个新人,我会这样做。
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
如果我正在修改现有的人,我这样做:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
请记住,这是一个非常简单的例子。实际上我使用的是Pure POCO(无代码生成),Repository模式(不处理ctx.Persons)和Unit of Work(不处理ctx.SaveChanges)。但是“在幕后”,以上是我的实施中发生的事情。
现在,我的问题 - 我还没有找到一个我不得不使用Attach的场景。
我在这里失踪了什么?我们什么时候需要使用Attach?
编辑
只是为了澄清,我正在寻找何时使用Attach over AddObject(或反之亦然)的示例。
编辑2
下面的答案是正确的(我接受了),但我认为我会添加另一个例子,其中Attach将是有用的。
在我上面修改现有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语句。
白衣染霜花
相关分类