2012-03-01 4 views
0

EF4.3 ObjectContextを使用する受注フォームがあります。私はレシート(EF ObjectContextのエンティティ)を保持し、コンテキスト外に移動し、ユーザがそれを元に戻したいときに戻すことを理解するのに苦労しています。状況は、領収書フォームが閉じられるたびに、状況がなくなることです。そして、問題は、ユーザーがそれを元に戻して現在のコンテキストに追加できることです。EFコンテキストのエンティティを保持し、必要なときに戻る

Dim receipt = DeSerialize(savepath) 
Context.Attach(receipt) 
+0

あなたは 'EntityObject'ベースのエンティティを使用していますか?そのような場合は、必要なときにデータベースからあきらめて読み込みます。 –

答えて

0

を添付する

Serialize(receipt, savepath) 
While Receipt.RECEIPTLINEs.Count > 0 
     Context.Detach(Receipt.RECEIPTLINEs.First) 
End While 
Context.Detach(Receipt) 
AddNewReceipt() 

コードを切り離すためのコード、ユーザーは常にそれをバック取り出すことができます - あなたは、新しいコンテキストでクエリを実行します。あなたは領収書の識別(キー)を知る必要があります。

領収書インスタンスを共有する必要がある場合は、領収書への参照を維持するためのインフラストラクチャコードを作成し、最初のフォームで設定し、後のコードで使用します。つまり、EFは何もできません。最初のフォームを閉じる前に、コンテキストから領収書を切り離すだけで済みます。

objectContext.Detach(receipt); 
+0

基本的には、グローバルに別々のコンテキストを利用できるようにする必要があることを意味し、ユーザーが領収書を保持するたびに、現在のコンテキストから切り離して新しいコンテキストに添付する必要があります。必要なときは、新しいコンテキストを照会し、現在のコンテキストにアタッチしてください。 –

+0

いいえ、グローバルコンテキストは必要ありません。 –

+0

お時間をありがとう。 AttachとDetachは、 "複数のオブジェクトを追跡できません"または "一時的なEntityKey値を持つオブジェクトをオブジェクトコンテキストに添付できません"などのObjectStateManagerエラーをスローします。あなたが小さなコードスニペットを提供できるかどうか本当にありがとうございます –