Entity Framework 4を使用していて、遅延読み込みにいくつか問題があります。 私は3つのエンティティを持ち、それぞれが互いに関係しています。 CarSetupには、エンティティを含むCarエンティティが含まれます。彼らはすべて怠け者です。Entity Frameworkと遅延ロードの問題
問題を再現するための簡単な単体テストを作成しました。
CarSetup carSetup = carSetupContext.CreateObject<CarSetup>();
Car car = Load("car1");
carSetup.Car = car;
carsetupオブジェクトに車を割り当てるとクラッシュします。実際には、CarエンティティのEqualsメソッドでクラッシュします。
public override bool Equals(object obj)
{
if(obj == null)
{
return false;
}
return this.Event.Equals(((Car)obj).Event);
}
equalsメソッドが呼び出される前にエンティティをクイックウォッチすると、すべてのサブエンティティがロードされ、問題は発生しません。
車のセットアップに既存の車を割り当てると、フレームワークはその車の既存のCarSetupsをすべて読み込み、それらに「Equals」メソッドを呼び出します。ただし、遅延読み込みが有効になっているため、Carのイベントは通常のnullです。 Eventプロパティにアクセスしようとすると、NOの読み込みが発生し、クラッシュします。私はequalsメソッドで "this"プロパティをチェックしており、 "System.Data.Entity.DynamicProxies.Car"タイプです。私もチェックして、EventId Guidは車のエンティティに正しく設定されています。
誰でも何が起こっているかについて考えていますか?
EDIT:
car.Equals(car);
すべてが完璧に動作します:私は私のてmanualy equalsメソッドを呼び出す場合は、もう少しテストを行った後。 Entity Frameworkがリレーションシップをロードすることを決定し、Equalsメソッドを自動的に呼び出すときにのみ発生します。
おかげ
あなたと間違って何かがあります返り値は、Equalsメソッドのブラケットです。これはコンパイルされていないし、あなたの問題の理由になることもできないので、おそらくタイプミスだけです。 – Slauma
それを指摘してくれてありがとう。私のエンティティはもう少し複雑なので、私は本当に間違いに気づいていない質問のためにそれをストライプしました。 – autoexec