配送料を問い合わせており、その1つ(品目タイプ)の物品を含めて、配送料のリストを持っていることを除いてすべてが返ってきています。それゆえ返送の配達兄弟。ここで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 *(これは私が見ているように 'virtual'です)によってコレクションにデータが格納されている可能性があります。 –
@IvanStoev私が気づいたのは、MaterialTypeでの配信は、上記のフィルタ(Date range)に基づいているということです。 – Miguel