Key*_*red 4 c# entity-framework
我有这个简单的模型:
class Parent
{
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
class Child
{
public int Id { get; set; }
public int ParentId { get; set; }
public virtual Parent Parent { get; set; }
}
class MyContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
public DbSet<Child> Children { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Child>().HasRequired(s => s.Parent).WithMany(s => s.Children).HasForeignKey(s => s.ParentId);
base.OnModelCreating(modelBuilder);
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用MyContext
如下,我得到空引用异常,因为child.Parent
是null
var context = new MyContext();
var child = context.Children.First();
var parentId = child.Parent.Id; // Parent == null
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,我必须更改Parent
和的Child
类的访问修饰符public
.
为什么需要这个?或者这只是一个错误?
这不是一个错误,您正在使用名为Lazy Loading的实体框架功能,要使用它,您需要满足在此链接中可以找到的一些要求.其中一个要求是您的实体类必须是public
.在该链接中,您将找到正确的解释为什么您应该满足这些要求,但总的来说,您的问题是因为EF无法从您的实体创建代理类,因为您不能使用延迟加载.您已经满足了延迟加载的主要要求,这是导航属性必须的virtual
,但首先您必须满足EF创建代理类所需的要求.
作为一个额外的资源,我建议你看看这个msdn页面,在那里你可以找到使用EF加载相关实体的所有方法.
归档时间: |
|
查看次数: |
127 次 |
最近记录: |