作为实体框架代码的一些测试的一部分首先,我正在测试更改跟踪。在一个小的测试数据库中,我有一个表两辆车,我对运行一个测试方法:EF为什么在SaveChanges上读取我的Unchanged对象?
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();
我已经添加了跟踪输出到Car
类的TopSpeed
和Brand
属性的getter和setter看他们如何访问。 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只读取已知会更改的对象,或者我错过了某些内容?是否还需要添加其他功能才能启用更改跟踪?