EF 4.1 - 将项添加到虚拟的集合属性

Jas*_*ans 4 ef-code-first entity-framework-4.1

我先使用EF 4.1代码.给出以下类片段:

public class Doctor
{
    public virtual ICollection<Hospital> Hospitals { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

注意:我在数据库上下文中有这个:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    this.Configuration.LazyLoadingEnabled = false;
}
Run Code Online (Sandbox Code Playgroud)

我想确保这里不涉及延迟加载.

我的问题是,如果没有virtualHospitals属性上的关键字,当我找回一家医院与他有关联的医院时,该收集是空的.通过包含virtual关键字,医院集合确实包含1项,这是我所期望的.

问题是,当我想创建一个全新的医生并立即将他与医院联系时,我得到一个Null reference例外,因为医院的财产尚未初始化.

谁能指出我在这里做错了什么?如何在创建新医生时向医院添加项目.

干杯.雅.

Lad*_*nka 22

您的代码是您在所有示例中通常看到的内容,但为了使这项工作更好:

public class Doctor
{
    private ICollection<Hospital> _hospitals;
    public virtual ICollection<Hospital> Hospitals 
    { 
        get { return _hospitals ?? (_hospitals = new HashSet<Hospital>()); }
        set { _hospitals = value } 
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不使用virtual关键字EF将不会为您初始化集合.同时,如果你Doctor通过它的构造函数创建全新的,你必须自己处理初始化.