我查詢我的交付和包括它的一個特性(材料類型)和它返回的一切,除了我的材料類型具有交貨清單良好。因此其退貨交付兄弟姐妹。EF是包括兒童的參考回到父母的兄弟姐妹
這裏是我的課:
public class Delivery
{
public int DeliveryId { get; set; }
public DateTime DeliveryDate { get; set; }
...
public int MaterialTypeId { get; set; }
public virtual MaterialType MaterialType { get; set; }
}
public class MaterialType
{
public int MaterialTypeId { get; set; }
public string Name { get; set; }
...
public virtual ICollection<Delivery> Deliveries { get; set; }
}
這裏是我的交貨日期範圍
var deliveries = DataStore.Filter<Delivery>(i =>
i.DeliveryDate >= startDate && i.DeliveryDate < endDate
,new string[] { "MaterialType" }) // Includes
.OrderByDescending(i => i.DeliveryDate).ToList();
public virtual IQueryable<T> Filter<T>(Expression<Func<T, bool>> predicate, string[] includes = null) where T : class
{
IQueryable<T> set = dbContext.Set<T>();
if (includes != null && includes.Count() > 0)
{
foreach (var include in includes)
{
set = set.Include(include);
}
}
return set.Where<T>(predicate).AsQueryable<T>();
}
這裏查詢是我得到的查詢和Delivery.MaterialType回結果。交付正在與原始交付的兄弟姐妹一起填充。
[{
"DeliveryId": 1,
"DeliveryDate": "2017-05-22",
"MaterialTypeId": 2,
"MaterialType": {
"MaterialTypeId": 2,
"Name": "Bulk",
"Deliveries": [{
"DeliveryId": 2,
"DeliveryDate": "2017-05-22",
"MaterialTypeId": 2,
},
{
"DeliveryId": 3,
"DeliveryDate": "2017-05-22",
"MaterialTypeId": 2,
}]
}
}]
延遲加載設置爲禁用。
dbContext.Configuration.LazyLoadingEnabled = false;
有沒有辦法阻止MaterialTypes填充交付?
這是('Include')裝載多麼渴望工作(儘管不應包括兄弟姐妹)。在你的情況下,這個集合可能已經被* lazy loading *填充了(這是我看到的'虛擬')。 –
@IvanStoev我注意到的是,MaterialType下的交付是由我上面的過濾器(日期範圍)驅動的。 – Miguel