我的问题直接与this one有关。
accepted answer说“你还必须改变关系的状态”。
我使用Model-First方法,我的实体中没有外键。我只有导航属性。
我可以通过DbEntityEntry
更改实体的状态,但我无法弄清楚如何更改关系本身的状态。我该如何访问它?
我的代码的例子:
Building building = new Building() { Id = 1, Name = "modified" }; //Buiding 1 exists in DB
building.Adress = new Adress() { Id = 1, Road = "Sesame street" }; //Address 1 exists in DB
building.Adress.State = new State() { Id = 1 }; //State with Id 1 exists in DB
dbContext.Entry<Building>(building).State = EntityState.Modified;
dbContext.Entry<Adress>(building.Adress).State = EntityState.Modified;
//The state itself is not modified, but the relation between adress and state may do.
dbContext.Entry<State>(building.Adress.State).State = EntityState.Unchanged;
dbContext.SaveChanges();
此代码传递没有错误,但Adress
和State
之间的关系永远不会更新。
建筑物的Name
和Street
属性确实存在。
答案 0 :(得分:0)
查看ObjectStatementManager(并使用ctrl +。来获取IObjectContextAdapter的引用)。
var unchangedItems = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);
var addedItems = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added);
它还特别具有ChangeRelationshipState
,这在您的场景中听起来很合适。