エンティティのプロパティをeager-loadしました。
そのプロパティの FK 参照が存在しない項目 (つまり、値 -1) を指している場合、プロパティは (当然のことながら) 読み込まれません。ただし、何らかの理由で、コード内のプロパティの値にアクセス/チェックしようとすると、EF はデータベース コンテキストにアクセスし、このプロパティの遅延読み込みを実行しようとします。
FK-reference が または既存の FK-Id である場合、すべて正常に機能します。
public Tbl_Car GetCar(int id){
Tbl_Car car = null;
using (MyContext context = new MyContext())
{
//Explicitly tell EF not to use lazyloading seems to be the only way
//context.Configuration.LazyLoadingEnabled = false;
car = context.Tbl_Car
.Include("Owner")
.Where(x => x.Id=id)
.SingleOrDefault();
}
return car;
}
public void DisplayCar(){
Tbl_Car car=GetCar(1234);
//I need to check if Owner is null before accessing properties.
//For some reason lazy loading kicks in and starts complaining about missing
//objectcontext
//NOTE: This only occurs if car.OwnerId is set to a nonexistent entity, i.e -1
//If car.ownerId=<null> or the id of a owner which existing, all is ok
enter code here
if (car.Owner!=null){
Console.WriteLine(car.Owner.Name); //dont get this far
}
}
この動作は EF のバグですか? たぶんそれは私だけかもしれませんが、私の考えでは、プロパティを明示的にeager-loadした場合、EFは、指定されたFKを持つエンティティが見つからなくても、どの時点でも遅延読み込みを試みるべきではありません。