gpt4 book ai didi

c# - 使用 dbcontext 和 projection 进行预加载

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:19 24 4
gpt4 key购买 nike

我们正在将我们的项目从 ObjectContext 转换为 dbContext。我们当前的问题是处理预加载的方式不同。

示例上下文

public class Person
{
public virtual ICollection<Email> Emails { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Email
{
public string Address{ get; set; }
}
public class Post
{
public string Content{ get; set; }
}

我们在整个企业中有许多代码段期望电子邮件被加载,因此调用 person.Emails.First() 时没有考虑它。所以我们需要确保 Emails 被预先加载。

有时我们可以只使用 Include

但是,当我们在数据层中使用投影时,我们遇到了问题。即

return context.Persons.Select(p=> new Top5VM {
Person = p,
TopPosts = p.Posts.Take(5)
};

我们有很多代码依赖于 Top5VM 并期望加载 Person.Emails

无论我们尝试过什么,我们都无法弄清楚将 Include(或 Load)函数调用放在哪里才能真正发挥作用。

有了 ObjectContext,我们在 Top5VM 上只有一个名为 Emails 的虚拟属性。一旦它被加载,ObjectContext 就会引用所有这些 Entities,因此即使我们通过 person 对象访问它们也不需要返回到服务器。但这不再适用于 DbContext

最佳答案

想通了。每当我想使用投影来完成预先加载时,我都需要设置 context.Configuration.LazyLoadingEnabled = false;。当然,除非我想直接从投影访问加载的实体。

关于c# - 使用 dbcontext 和 projection 进行预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28527720/

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