gpt4 book ai didi

asp.net-mvc - 延迟加载忽略显式加载

转载 作者:行者123 更新时间:2023-12-02 16:18:06 25 4
gpt4 key购买 nike

我有一个通过显式加载加载的实体,但是当我尝试访问加载的引用时,它会再次使用延迟加载加载,而无需使用where子句!

我发现的唯一方法是禁用延迟加载,但我不能!

如果我已经显式加载了引用,我不明白为什么它会再次加载。

Here's a example (i shorted a little bit for demonstration purposes):

        var employee = dbo.Employees
.Where(m => m.StoreId == SessionContext.Store
&& m.Id == 10)
.Include(m => m.Person)
.FirstOrDefault();

if (employee == null)
{
return HttpNotFound();
}

dbo.Entry(employee)
.Collection(m => m.Stocks)
.Query()
.Where(m => ...)
.Load();

// LAZY LOADING HERE
foreach (var stock in employee.Stocks)
{
}

最佳答案

您必须禁用延迟加载,EF 将在您迭代时尝试获取所有股票

用Using block 包裹你的上下文

using(DbContext dbo=new DbContext())
{
//Disable lazy loading
dbo.Configuration.LazyLoadingEnabled=false;
var employee = GetEmployee()...


dbo.Entry(employee)
.Collection(m => m.Stocks)
.Query()
.Where(m => ...)
.Load();

}//Kill the context

// NO LAZY LOADING HERE
foreach (var stock in employee.Stocks)//If you don't disable Lazy Loading, EF will try to fetch all stocks
{
}

使用 Query 方法时,通常最好关闭导航属性的延迟加载。这是因为否则整个集合可能会在执行过滤查询之前或之后通过延迟加载机制自动加载。

https://msdn.microsoft.com/en-us/data/jj574232.aspx

否则,如果您不想禁用延迟加载,则必须按照 jbl 的说明进行操作

var employeeStocksFiltered = dbo.Entry(employee) .Collection(m => m.Stocks) .Query() .Where(m => ...) .ToList(); 
foreach (var stock in employeeStocksFiltered ) { }

关于asp.net-mvc - 延迟加载忽略显式加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332660/

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