2

エンティティのプロパティを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を持つエンティティが見つからなくても、どの時点でも遅延読み込みを試みるべきではありません。

4

0 に答える 0