DbSet.Create与新实体()的分支

我对是否使用DbSet.Create有点困惑,或者只是简单地添加一个实体并添加它。 我真的不明白使用DbSet.Create的后果。

我知道DbSet.Create将创build一个代理版本(如果适用的话),但我不明白这意味着什么。 为什么我在乎 在我看来,一个空的Proxied类没有比非代理类更有用,因为没有相关的实体来延迟加载。

你能告诉我,除了明显的差异吗? 你为什么要关心?

One Solution collect form web for “DbSet.Create与新实体()的分支”

使用DbSet<T>.Create()有意义的scheme是将现有实体附加到上下文,然后利用相关实体的延迟加载。 例:

 public class Parent { public int Id { get; set; } public virtual ICollection<Child> Children { get; set; } } public class Child { public int Id { get; set; } public string Name { get; set; } } 

接下来会工作:

 using (var context = new MyDbContext()) { var parent = context.Parents.Create(); parent.Id = 1; // assuming it exists in the DB context.Parents.Attach(parent); foreach (var child in parent.Children) { var name = child.Name; // ... } } 

这里触发了延迟的儿童加载(可能导致空集合,但不为null )。 如果你想用new Parent()replacecontext.Parents.Create() ,foreach循环将会崩溃,因为parent.Children总是为null

编辑

另一个例子是在这里(填充新实体的外键属性,然后在新实体插入到数据库之后,导航属性被延迟加载): 插入后的延迟加载属性

  • 首先使用EF代码的唯一键
  • 如何从代码检索数据注释? (编程)
  • EF 4.1代码优先的复合钥匙
  • entity framework数据库中的代码优先默认数据
  • 你可以使用Entity Framework 4.1 Code第一种方法创buildsql视图/存储过程
  • 保存不会为其关系公开外键属性的实体时发生错误
  • 枚举与EF代码优先 - 标准方法播种数据库,然后使用?
  • 多个主键与asp .net mvc 3
  • 为什么。包容很慢? 通过主键获取多个实体的最有效方法?
  • ADO.NET DbContext生成器与ADO.NET Poco实体生成器(ObjectContext)
  • StringLength与MaxLength属性entity frameworkEF Code First的ASP.NET MVC