我最近一直在使用Entity Framework4,对于何时使用ObjectSet.Attach和ObjectSet.AddObject有些困惑。
据我所知:
在创建全新实体时使用"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(无代码生成)、存储库模式(不处理ctx.Persons)和工作单元(不处理ctx.SaveChanges)。但“在幕后”,以上就是在我的实现中发生的事情。
现在,我的问题是-我还没有找到一个我必须使用Attach的场景。
这里我漏掉了什么?什么时候需要使用Attach?
编辑
为了澄清,我正在寻找何时通过AddObject使用Attach的示例(反之亦然)。
编辑2个
下面的答案是正确的(我接受了),但我认为我应该添加另一个示例,其中Attach将是有用的。
在我上面的修改现有Person的示例中,实际上执行了两个查询。
一个用于检索人员(.SingleOrDefault),另一个用于执行更新(.SaveChanges)。
如果(出于某种原因),我已经知道"Joe Bloggs“存在于系统中,为什么要先查询他呢?我可以这样做:
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();
这将导致只执行一条UPDATE语句。
https://stackoverflow.com/questions/3920111
复制相似问题