我首先使用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
例外,因为医院的财产尚未初始化。
有人能指出我在这里做错了什么吗?如何在创建新医生时向医院添加项目。
干杯。 雅各
答案 0 :(得分:22)
您的代码是您在所有示例中通常看到的内容,但为了使这项工作更好:
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
,你必须自己处理初始化。
答案 1 :(得分:1)
我认为这可以帮到你。
public class Doctor
{
public Doctor()
{
Hospitals = new ICollection<Hospital>();
}
public virtual ICollection<Hospital> Hospitals { get; set; }
}