这两种说法(实体框架)之间的区别是什么
本文关键字:之间 区别 是什么 框架 实体 两种 | 更新日期: 2023-09-27 18:26:04
有人知道以下语句的区别吗?
_context.AddObject(user);
_context.Users.AddObject(user);
以及
_context.Attach(user);
_context.Users.Attach(user);
感谢
编辑
抱歉有些混淆:
我知道AddObject和Attach之间的区别,我的意思是你使用AddObject的方式有什么区别吗,即
_context.AddObject(user);
_context.Users.AddObject(user);
ObjectContext可以有多个具有相同模式的集合,因此通常最好使用显式集合。即_context.Users.AddObject(user);
来自MSDN:
在.NET Framework版本4中,我们建议您在要执行创建、读取、删除、附加和更新操作。ObjectSet派生自ObjectQuery,因此它用作查询对象。
在.NET Framework版本4开始的版本中,可以使用在ObjectSet上定义了以下方法,而不是等效的方法在ObjectContext:上定义
AddObject Attach ApplyCurrentValues ApplyOriginalValues DeleteObject Detach
MSDN答案
摘要:
AddObject
将对象状态设置为Added
,Attach
将对象状态设为Unchanged
。如果之后调用SaveChanges()
方法,上下文将尝试将AddObject
添加的对象插入到存储中,而Attach
添加的对象将被视为未更改,并且不会对其执行任何操作。
有一个简单的区别,因为您的示例不正确。它不是
context.AddObject(user)
但是
context.AddObject("UserEntitySet", user)
如果直接在上下文中使用AddObject
或Attach
,则必须告诉上下文要将对象添加或附加到哪个集。如果直接在ObjectSet
上使用实现,则它已经以强类型方式封装了这些信息。
IMHO这些方法仅作为与EFv1(.NET 3.5 SP1)的向后兼容性而存在,其中不存在ObjectSet
。