c# - Entity Framework 尝试在对象为空时再次延迟加载对象

标签 c# entity-framework

我对 Entity Framework 处理空对象的方式有疑问。 下面的示例是一个简单的 1 到 0..1 关系。当一个人的 Profile 不存在时,Person 对象下的 Profile 对象为空。

但是 EF 正在尝试再次执行延迟加载提取。结果,抛出 ObjectDisposedException

public void Test()
{
    Person person = null;

    using (var ctx = new MainContext())
    {
        person = ctx.Persons
            .Include(c => c.Profile);
            .FirstOrDefault(p => p.Name == "Ben");
    }

    // ObjectDisposedException is throw here if Profile doesn't exist
    var profile = person.Profile;
}

EF 似乎无法区分“不存在”和“尚未获取”。我现在最好的解决方案是禁用延迟加载。

Configuration.LazyLoadingEnabled = false;

但这会隐藏我想看到的所有 ObjectDisposedException,因为我有时可能会忘记放入 Include,现在它们都变成了 null。

处理这个问题有更好的主意吗?

最佳答案

如果你只是处理空对象,你可以在类构造函数中初始化对象,像这样:

public Person
{
    this.Profile = new Profile();
}

关于c# - Entity Framework 尝试在对象为空时再次延迟加载对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617658/

相关文章:

javascript - 将 C# List<string> 转换为 Javascript

c# - 如何在 C# 中对齐 float (左填充)

c# - C# 4.0 中的 Barrier 和 C# 3.0 中的 WaitHandle 之间的区别?

entity-framework - Entity Framework 是否有类似于 Math.Max 的函数?

c# - 在EntityFramework中保存多对多

c# - 在不窃取焦点的情况下选择 TabControl 中的标签页

c# - C#中值类型和引用类型有什么区别?

c# - Entity Framework 5 日志数据库在运行时发生变化

entity-framework - 在 Entity Framework 中使用 lambda 语法进行多个左连接

multithreading - Entity Framework 和多线程