2012-12-05 79 views
1

我的問題與this one直接相關。更改實體框架中關係的狀態

accepted answer說「你也必須改變關係的狀態」。

我使用模型優先的方法,並且我沒有在我的實體中的外鍵。我只有導航屬性。

我可以通過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屬性。

回答

0

查看ObjectStatementManager(並使用ctrl +。獲取IObjectContextAdapter的引用)。

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

它也特別有ChangeRelationshipState這聽起來適合您的情況。