[英]EF6 Turning off Lazy Loading returns null
在將lazyloading設置為false之前。 我的查詢返回了正確的值,但它帶來了一半的數據庫。 我設置了lazyloading = false,並且從兩個模型中都刪除了“虛擬”。 但是它仍然返回Null。 這是我的代碼:linq語句
public BasePremiumNotional GetBasePremiumNotional(int productVersionId, int bedrooms, string propertyType, int? startYear, int? endYear, DateTime version)
{
BasePremiumNotional basePremiumNotional =
GetSingle(t => t.ProductVersionId == productVersionId)
.BasePremiumNotionals.FirstOrDefault(
g => g.NoOfBedrooms == bedrooms && g.PropertyType == propertyType && g.StartYear == startYear && g.EndYear == endYear && g.Version == version.Date);
return basePremiumNotional;
}
進行實際調用的GetSingle方法:
public T GetSingle(Expression<Func<T, bool>> predicate)
{
var query = _entities.Set<T>().FirstOrDefault(predicate);
return query;
}
在這種情況下, T
是父對象ProductVersion
,而子對象是BasePremiumNotionals
關閉延遲加載不會自動為其預加載導航屬性。 為了也獲得導航屬性,您需要在查詢中包括它們 。
關閉“延遲加載”的問題是,您必須明確告訴您要隨查詢一起填充的導航屬性。
要將導航屬性和謂詞Include
在內,您可以執行以下操作:
public T GetSingle<T>(Expression<Func<T, bool>> predicate,
params Expression<Func<T, object>>[] navigationProperties)
{
IQueryable<T> query = _entities.Set<T>();
foreach (var navigationProperty in navigationProperties)
{
query = query.Include(navigationProperty);
}
return query.FirstOrDefault(predicate);
}
並假設一個看起來像這樣的實體:
public class FooBar
{
public int ProductVersionId { get; set; }
public ICollection<BasePremiumNotional> BasePremiumNotionals { get; set; }
}
您可以這樣使用它:
var foo = GetSingle<FooBar>(t => t.ProductVersionId == productVersionId,
n => n.BasePremiumNotionals)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.