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は更新されません。建物NameStreetプロパティの。

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 に答える