这两个语句之间有什么区别(实体框架)

时间:2012-02-28 09:02:50

标签: c# entity-framework

是否有人知道以下陈述的差异(如果有的话)?

_context.AddObject(user);

_context.Users.AddObject(user);

以及

_context.Attach(user);

_context.Users.Attach(user);

由于

修改

抱歉有些困惑:

我知道AddObject和Attach之间的区别,我的意思是你使用AddObject的方式有什么不同,即

_context.AddObject(user);
_context.Users.AddObject(user);

3 个答案:

答案 0 :(得分:1)

ObjectContext可以有多个具有相同模式的集合,因此通常最好使用显式集合。即_context.Users.AddObject(user);

来自MSDN

  

在.NET Framework第4版中,我们建议您使用方法   要执行创建,读取,删除,附加和的ObjectSet对象   更新操作。 ObjectSet派生自ObjectQuery,所以它也是   作为查询对象。

     

在以.NET Framework版本4开头的版本中,您可以使用   以下在ObjectSet上定义的方法而不是等效的方法   在ObjectContext上定义:

 AddObject   
 Attach
 ApplyCurrentValues
 ApplyOriginalValues
 DeleteObject
 Detach

答案 1 :(得分:0)

MSDN answer

要点:

AddObject将对象状态设置为AddedAttach将其设置为Unchanged。如果之后调用SaveChanges()方法,则上下文将尝试将AddObject添加的对象插入存储,而Attach添加的对象将被视为未更改且不会执行任何操作它

答案 2 :(得分:0)

由于您的示例不正确,因此存在简单的区别。它不是

context.AddObject(user) 

但是

context.AddObject("UserEntitySet", user)

如果您直接在上下文中使用AddObjectAttach,那么如果您直接在ObjectSet上使用该实现,则必须告诉您要添加的内容或将对象附加到哪个上下文将此信息以强类型方式包装。

恕我直言,这些方法仅与EFv1(.NET 3.5 SP1)的向后兼容性存在,其中ObjectSet不存在。