更改集合导航属性时,不会更改实体的状态

时间:2015-09-01 09:37:36

标签: c# entity-framework

这可以按预期工作:

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

因此,在这种情况下,实体不会自动标记为已修改。我通过手动将其标记为已修改来解决此问题,但我希望它自动发生。

我该怎么做?如何检测实体的关系是否被修改?

1 个答案:

答案 0 :(得分:0)

诀窍是use the answer here,但在我隐含地强制检查更改之前,这对我不起作用:

myContext.ChangeTracker.DetectChanges();