我首先使用EF 4.1代码。给定以下类片段:
public class Doctor
{
public virtual ICollection<Hospital> Hospitals { get; set; }
}
注意:我在数据库上下文中有这个:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
this.Configuration.LazyLoadingEnabled = false;
}
我想确保这里不涉及懒惰加载。
我遇到的问题是,如果Hospitals属性上没有virtual
关键字,当我检索到一个与他有关联医院的医生时,该集合是空的。通过包含virtual
关键字,医院集合确实包含1个项目,这正是我所期望的。
问题是,当我想创建一个全新的医生并立即将他与医院联系起来时,我会得到一个Null reference
异常,因为Hospitals属性尚未初始化。
有人能指出我在这里做错了什么吗?如何在创建新医生时将项目添加到医院。
干杯。Jas。
您的代码是您通常在所有示例中看到的东西,但要使其发挥作用,这一个要好得多:
public class Doctor
{
private ICollection<Hospital> _hospitals;
public virtual ICollection<Hospital> Hospitals
{
get { return _hospitals ?? (_hospitals = new HashSet<Hospital>()); }
set { _hospitals = value }
}
}
如果您不使用virtual
关键字,EF将不会为您初始化集合。同时,如果您通过其构造函数创建全新的Doctor
,则必须自己处理初始化。
我认为这可以帮助你。
public class Doctor
{
public Doctor()
{
Hospitals = new ICollection<Hospital>();
}
public virtual ICollection<Hospital> Hospitals { get; set; }
}