ef代码优先-ef 4.1-将项添加到虚拟的集合属性中



我首先使用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; }
}

相关内容

  • 没有找到相关文章

最新更新