Entity Frameworkコードのテストの一部として、まず変更の追跡をテストしています。私が見てCar
クラスのTopSpeed
とBrand
プロパティのゲッターとセッターにトレース出力を追加しましたEFがSaveChangesで未変更のオブジェクトを読み込むのはなぜですか?
Debug.WriteLine("Reading cars...");
var cars = context.Cars.ToArray();
Debug.WriteLine("Updating top speed of first car...");
Debug.WriteLine(string.Format("Type of car[0] is {0}", cars[0].GetType().ToString()));
cars[0].TopSpeed = 260;
Debug.WriteLine("Saving changes...");
context.SaveChanges();
:小テスト・データベースでは、私は反対テストメソッドを実行し、テーブル内の2台の車を持っていますどのようにアクセスされているか。 TopSpeed
はint?
であり、Brand
はBrand
エンティティのナビゲーションプロパティです。上記のコードを実行すると、以下の出力が得られます。
Reading cars... Setting TopSpeed to 210 for ABC123. Car: Getting TopSpeed for ABC123. Setting TopSpeed to 250 for XYZ987. Car: Getting TopSpeed for XYZ987. Updating top speed of the first car... Type of car[0] is System.Data.Entity.DynamicProxies.Car_18E3E11297DC48759312BDF1C2FFEBE9F19BAE5D487CED2A9781A6CA730071EA Setting TopSpeed to 260 for ABC123. Saving changes... Car: Getting Brand for ABC123. Car: Getting Brand for XYZ987. Car: Getting TopSpeed for ABC123. Car: Getting TopSpeed for ABC123. Car: Getting TopSpeed for XYZ987. Car: Getting TopSpeed for ABC123. Car: Getting TopSpeed for ABC123. Car: Getting TopSpeed for ABC123. Car: Getting TopSpeed for ABC123. Car: Getting TopSpeed for ABC123.
オブジェクトのタイプは、変更追跡用のEF動的プロキシです。それでも、SaveChanges()
を呼び出すと、変更されていないXYZ987車の特性が読み取られます。私は、変更の追跡によって、EFは変更されることがわかっているオブジェクトのみを読み込ませたり、何かが欠けていると思っていました。変更追跡を有効にするために追加する必要があるものはありますか?