更改实体框架中关系的状态

时间:2012-12-05 16:45:58

标签: entity-framework-5 ef-model-first

我的问题直接与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();

此代码传递没有错误,但AdressState之间的关系永远不会更新。 建筑物的NameStreet属性确实存在。

1 个答案:

答案 0 :(得分:0)

查看ObjectStatementManager(并使用ctrl +。来获取IObjectContextAdapter的引用)。

var unchangedItems = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);
var addedItems = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added);

它还特别具有ChangeRelationshipState,这在您的场景中听起来很合适。