0

私には2つのエンティティがParentありChild、クライアント側で作成Parentしてから呼び出しますcontext.submitChanges

InsertParent(Parent parent)i doのサーバー側で:

InsertParent(Parent parent)
{
   Child child = this.ObjectContext.Childs.CreateObject();
   parent.child = child;

   if ((parent.EntityState != EntityState.Detached))
   {
     this.ObjectContext.ObjectStateManager.ChangeObjectState(parent, EntityState.Added);
   }
   else
   {
    this.ObjectContext.Parents.AddObject(parent);
   }
}

今、私は2つの問題を抱えています。

if elseの前Parent.idは0で、その後はまだ0ですが、データベースにはデータが入力されています。

もう1つは、Child保存されますChild.ParentIdが0です。

理由がわかりません。

この動作を達成する正しい方法は何ですか? SaveChanges()コンテキストを直接呼び出す必要がありますか?

4

2 に答える 2

1

edmx の Parent.Id の StoreGeneratedPattern プロパティが Identity に設定されていることを確認してください。これにより、挿入時に新しい値で更新されるようになります。

親IDが設定された後に子を追加できるように、これもトランザクションにラップします。

using(var scope = new TransactionScope()){
    ObjectContext.Parents.AddObject(parent);
    ObjectContext.SaveChanges(); //parent.id assigned
    parent.child = ObjectContext.Child.CreateObject();
    ObjectContext.SaveChanges();
    scope.Complete(); // commit transaction
}
于 2011-09-22T21:39:05.180 に答える
0

はい、SaveChanges()を使用する必要があります。これは、データをデータベースに永続化するためです。

非常に簡単な例

また、identity および主キーとして設定されているparents.Id 列と childs Id 列、および 2 つのテーブル間の関係を確認する必要があります。

于 2011-09-22T21:16:47.933 に答える