这可以按预期工作:
var customer = getCustomerFromSomewhere();
customer.Name = "Foo";
context.SaveChanges();
// ...
// ... in an override of SaveChanges, get the entry state
var isModified = entryState == EntityState.Modified; // ==true
简单属性已更改,因此实体会被上下文自动标记为已修改。
现在考虑更改导航属性,这是一个集合:
var customer = getCustomerFromSomewhere();
customer.Orders.Clear();
var order = getOrderFromSomewhere();
customer.Orders.Add(order);
context.SaveChanges();
// ...
// ... in an override of SaveChanges, get the entry state
var isModified = entryState == EntityState.Modified; // ==false
因此,在这种情况下,实体不会自动标记为已修改。我通过手动将其标记为已修改来解决此问题,但我希望它自动发生。
我该怎么做?如何检测实体的关系是否被修改?
答案 0 :(得分:0)
诀窍是use the answer here,但在我隐含地强制检查更改之前,这对我不起作用:
myContext.ChangeTracker.DetectChanges();