这两种说法(实体框架)之间的区别是什么

本文关键字:之间 区别 是什么 框架 实体 两种 | 更新日期: 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将对象状态设置为AddedAttach将对象状态设为Unchanged。如果之后调用SaveChanges()方法,上下文将尝试将AddObject添加的对象插入到存储中,而Attach添加的对象将被视为未更改,并且不会对其执行任何操作。

有一个简单的区别,因为您的示例不正确。它不是

context.AddObject(user) 

但是

context.AddObject("UserEntitySet", user)

如果直接在上下文中使用AddObjectAttach,则必须告诉上下文要将对象添加或附加到哪个集。如果直接在ObjectSet上使用实现,则它已经以强类型方式封装了这些信息。

IMHO这些方法仅作为与EFv1(.NET 3.5 SP1)的向后兼容性而存在,其中不存在ObjectSet