首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架4- AddObject vs Attach

实体框架4- AddObject vs Attach
EN

Stack Overflow用户
提问于 2010-10-13 08:59:05
回答 5查看 94.3K关注 0票数 135

我最近一直在使用Entity Framework4,对于何时使用ObjectSet.AttachObjectSet.AddObject有些困惑。

据我所知:

  • 当系统中已存在实体时使用"Attach“

在创建全新实体时使用"AddObject”

所以,如果我创建了一个新的Person,我会这样做。

代码语言:javascript
复制
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();

如果我正在修改一个现有的Person,我会这样做:

代码语言:javascript
复制
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“存在于系统中,为什么要先查询他呢?我可以这样做:

代码语言:javascript
复制
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();

这将导致只执行一条UPDATE语句。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3920111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档