Tyl*_*itt 11 .net vb.net entity-framework
我有一个实体对象的初始化程序/更新程序.使用中是否有任何危险
Dim myObject As SpecialThing = New SpecialThing()
Run Code Online (Sandbox Code Playgroud)
然后设置所有值(使用已写入的更新程序),或者我是否需要使用:
Dim myObject As SpecialThing = SpecialThing.Create()
Run Code Online (Sandbox Code Playgroud)
有30个参数,updater已设置值/处理错误.只是想重用那段代码.
Sla*_*uma 35
我不知道你究竟是什么意思myDB.CreateSpecialThing(.....).我有三种解释:
objectContext.CreateObject<SpecialThing>()
dbContext.SpecialThings.Create() (EF> = 4.1)
SpecialThing.Create(.....)(EntityObject派生实体的静态方法)
第三种方法只是一个自动生成的帮助器,它接受参数(对于必需的字段),设置属性并返回对象.这与new之后创建对象和设置属性完全相同.
如果您正在使用POCO并使用延迟加载或更改跟踪代理,前两种方法将发挥作用.这些方法将创建实体的动态代理(它是从您的实体类派生的动态类),而不是直接创建实体.这些方法都不会将实体附加到上下文中,您必须手动执行此操作 - 无论您是使用这些方法创建实体还是使用它创建实体new.
使用CreateObject<T>/ Create可能很重要的示例,假设User具有virtual Roles集合的实体:
using (var ctx = new MyDbContext())
{
var user = ctx.Users.Create();
user.Id = 1;
ctx.Users.Attach(user);
var roles = user.Roles;
}
Run Code Online (Sandbox Code Playgroud)
使用virtual为Roles集合启用延迟加载,上面的代码将加载用户1的所有角色(如果用户没有角色,则加载空集合).使用new在另一方面...
using (var ctx = new MyDbContext())
{
var user = new User { Id = 1 };
ctx.Users.Attach(user);
var roles = user.Roles;
}
Run Code Online (Sandbox Code Playgroud)
...不允许懒惰地加载集合,因为user它不是动态代理对象.无论用户是否具有角色,roles都将是null.
所以,我要说创建一个实体没有危险new.您只需要记住,您没有为使用创建的实体提供延迟加载或更改跟踪代理的功能new.
如果您自己创建对象,它将不会附加到上下文。您需要附加该对象才能在数据库中更新更改。
即使您使用 Create 方法创建实体,它也不会附加到上下文,并且将通过 SaveChanges 方法保存在数据库中。 http://msdn.microsoft.com/en-us/library/gg696136(v=vs.113).aspx
| 归档时间: |
|
| 查看次数: |
12351 次 |
| 最近记录: |