1

我的问题与这个直接相关。

接受的答案是“您还必须更改关系的状态”。

我使用模型优先方法,并且我的实体中没有外键。我只有导航属性。

我可以通过 更改实体的状态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物业的情况确实如此。

4

1 回答 1

0

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

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

它还特别具有ChangeRelationshipState适合您场景的声音。

于 2014-06-18T02:30:13.387 回答