.net 创建<;对象>;vs新<;对象>;实体框架内
我有一个实体对象的初始化器/更新程序。使用时有危险吗.net 创建<;对象>;vs新<;对象>;实体框架内,.net,vb.net,entity-framework,.net,Vb.net,Entity Framework,我有一个实体对象的初始化器/更新程序。使用时有危险吗 Dim myObject As SpecialThing = New SpecialThing() 然后设置所有值(使用已编写的更新程序),或者我需要使用: Dim myObject As SpecialThing = SpecialThing.Create() 有30个参数,更新程序已经设置了值/处理错误。只是希望重用这些代码。如果您自己创建对象,它将不会附加到上下文。为了更新数据库中的更改,您需要 即使使用create方法创建实体,它
Dim myObject As SpecialThing = New SpecialThing()
然后设置所有值(使用已编写的更新程序),或者我需要使用:
Dim myObject As SpecialThing = SpecialThing.Create()
有30个参数,更新程序已经设置了值/处理错误。只是希望重用这些代码。如果您自己创建对象,它将不会附加到上下文。为了更新数据库中的更改,您需要 即使使用create方法创建实体,它也不会附加到上下文,这将通过SaveChanges方法保存在DB中。
我不知道你对
myDB.CreateSpecialThing(…)的确切意思。我有三种解释:
objectContext.CreateObject()
dbContext.SpecialThings.Create()
(EF>=4.1)
SpecialThing.Create(…)
(一种EntityObject
派生实体的静态方法)
第三个方法只是一个自动生成的辅助对象,它接受参数(用于必填字段)、设置属性并返回对象。这与使用new
创建对象并随后设置属性完全相同
如果您使用POCO并使用延迟加载或更改跟踪代理,那么前两种方法将发挥作用。这些方法将创建实体(从实体类派生的动态类)的动态代理,而不是直接创建实体。这些方法都没有将实体附加到上下文,您必须手动执行此操作-无论是使用这些方法创建实体还是使用new
创建实体
使用CreateObject
/Create
非常重要的示例,假设用户
实体具有虚拟
角色
集合:
使用(var ctx=new MyDbContext())
{
var user=ctx.Users.Create();
user.Id=1;
ctx.Users.Attach(用户);
var roles=user.roles;
}
使用virtual
为角色
集合启用延迟加载,上面的代码将加载用户1的所有角色(如果用户没有角色,则加载一个空集合)。另一方面,使用new
使用(var ctx=new MyDbContext())
{
var user=新用户{Id=1};
ctx.Users.Attach(用户);
var roles=user.roles;
}
…不允许延迟加载集合,因为user
不是动态代理对象<代码>角色
将为空
,无论用户是否具有角色
因此,我认为使用new
创建实体没有危险。您只需记住,对于使用new
创建的实体,您没有延迟加载或更改跟踪代理的功能,但对于myDB.CreateSpecialThing(…)
,您也没有延迟加载或更改跟踪代理的功能,至少对于我可以找到的此方法的解释,您是正确的,我指的是第三种解释。谢谢你的详尽回答