gpt4 book ai didi

ef-code-first - EF 4.1 - 将项目添加到虚拟的集合属性

转载 作者:行者123 更新时间:2023-12-03 18:13:48 29 4
gpt4 key购买 nike

我首先使用 EF 4.1 代码。鉴于以下类片段:

public class Doctor
{
public virtual ICollection<Hospital> Hospitals { get; set; }
}

注意:我在数据库上下文中有这个:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
this.Configuration.LazyLoadingEnabled = false;
}

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

我的问题是,没有 virtual Hospitals 属性上的关键字,当我检索与他有关联的医院的医生时,集合为空。
通过包含 virtual关键字,hospital 集合确实包含 1 个项目,这正是我所期望的。

问题是,当我想创建一个全新的医生并立即将他与医院关联时,我得到一个 Null reference异常(exception),因为 Hospitals 属性尚未初始化。

有人可以指出我在这里做错了什么吗?如何在创建新医生时向医院添加项目。

干杯。
贾斯。

最佳答案

您的代码是您在所有示例中通常会看到的内容,但要使其正常工作,这个代码要好得多:

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通过它的构造函数,你必须自己处理初始化。

关于ef-code-first - EF 4.1 - 将项目添加到虚拟的集合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5755778/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com