2009-03-18 9 views
2

エンティティフレームワークを使用してプロジェクトを開発する予定です。私がそれを実装する前にR & Dをやろうとしていましたが、この問題を発見しました。参照エンティティとともにデタッチエンティティ

私は、1対多(1:N)の関係を持つ「メンバー」エンティティで参照される「Person」という名前のエンティティを持っています。タスクは、対応するメンバーコレクションと共にPersonエンティティを照会し、それをプレゼンテーションレイヤに渡して表示、変更、または削除し、次に変更されたエンティティオブジェクトをモデルレイヤに戻して、エンティティをコンテキストにアタッチしますそれをDBに保存します。

まで私はDetach/Attach w.r.t. 'Person'のような単一のエンティティを作成し、それをDBに保存すると、すべてのことが絶対にうまく動作します。 しかし、エンティティ(Person)に参照先のエンティティ(Member)を照会してデタッチしようとすると、プレゼンテーションレイヤーに送ることができます。私は、Personエンティティコレクションのみを取得し、リファレンスMemberエンティティコレクションはコンテキストから切り離した後に完全に削除されることがわかります。ここで

私は参考のために私のコードスニペットを貼り付けています:

using (GOLProfessionalEntities context = new GOLProfessionalEntities()) 
{ 
    ObjectQuery<Person> query = 
     context.Person.Include("Members"); 

    var person = query.First(); 
    context.Detach(person); 

    return person; 
} 

いくつかのいずれかが、この解決策に出てくるならば、私は本当にいただければ幸いです。

ありがとうございます。 -ssak32

+0

申し訳ありませんが、私の提案は助けにならなかった、それは暗闇の中でしか刺していなかった。 o) – NikolaiDante

+0

人においでになって、本当にありがとうございました。それに感謝しています。あなたは、あなたの提案を削除してはならないでしょう、それは他の友人が技術についていくつかのアイデアを得るのを助けてくれたかもしれません:-) – Sajid

答えて

0

は、私はあなたにも、各メンバーを取り外す必要があると考えている:

を使用して(GOLProfessionalEntitiesをコンテキスト=新しいGOLProfessionalEntities()) { のObjectQueryクエリ= context.Person.Include( "メンバー");

var person = query.First(); 


while (person.Member.Count > 0) 
{ 
    context.Detach(person.Member.First()); 
} 


context.Detach(person); 

return person; 

}

は私がその作品を願っています。

+0

これは、メンバーが切り離されたときに関係が削除され、分離された。 – Santhos

2

ObjectQueryでMergeOptionをNoTrackingに設定できます。この方法では、Personは最初にObjectContextにアタッチされません。

  using (GOLProfessionalEntities context = new GOLProfessionalEntities()) 
      { 
       ObjectQuery<Person> query = 
        context.Person.Include("Members"); 
       query.MergeOption = MergeOption.NoTracking;// <-- 

       var person = query.First(); 

       return person; 
      } 

私はそれが誰かを助けるかもしれないという答えでとても遅いです。

+0

Mishaありがとう、あなたの記事は私が問題を解決するのを助けます。 –

関連する問題