要するに、なぜこれが失敗するのですか (myChildObject
はデータベースに追加されません)。ObjectContext で動作することに注意してください。
using (var db = new dbEntities())
{
var myParentObject = db.parentObjects.First(); // this definitely exists in the db
// this **should** attach myChildObject to the context,
// and therefore add it to the db on .SaveChanges() - it doesn't!
var myChildObject = new childObject(){
parentObject = myParentObject
};
db.SaveChanges();
}
このMSDNブログの投稿は言う
すでに追跡されている別のエンティティにフックすることで、新しいエンティティをコンテキストに追加できます。これは、新しいエンティティを別のエンティティのコレクション ナビゲーション プロパティに追加するか、別のエンティティの参照ナビゲーション プロパティを新しいエンティティを指すように設定することによって行うことができます。
追跡対象のオブジェクトをmyChildObject
参照しているため、上記のコードは確実に機能するはずです。EF は、コレクションmyParentObject
に追加する必要があることを理解するのに十分なほど賢くある必要があります。childObjects
ObjectContext を使用していたときは問題なく動作しましたが、dbContext で動作させるにはすべてのコードを書き直す必要があることがわかりました。
それを機能させるには、次のように書き直す必要があります。
using (var db = new dbEntities())
{
var myParentObject = db.parentObjects.First(); // this definitely exists in the db
var myChildObject = new childObject();
myParentObject.childObjects.Add(myChildObject);
db.SaveChanges();
}