2009-05-21 6 views
4

現在、私はEntity Frameworkの問題に苦しんでいます。私はefフレームワークの上に座って、フレームワークへの問い合わせを可能にするwcfサービスを持っています。ある時点で、ユーザーはフレームワークからファイルを要求できます。ファイルはソリューションエントリによって参照されるため、ソリューションからファイルを要求すると、ファイルストアへのアクセス権を得るために参照がロードされます。Entity Frameworkのデータ参照をアンロード

すべてがうまくいますが、その時点以降は、そのソリューションエントリを返す別のクエリを実行するたびに、ファイル全体が戻り結果にアタッチされます。結果のエントリには、ファイルストアへのアンロードされた参照のみが再度含まれるように、参照の切り離しまたはアンロードの方法が必要です。

私は新しいコンテキストを作成し、そのコンテキストから情報を取得しようとしましたが、そのとき元のコンテキストのエンティティも変更されました。

元のコンテキストからエンティティを切り離して、新しいコンテキストからクエリを実行しようとしました。それはどちらもうまくいかない。

これを行う方法が1つ見つかりました。非ファイルダウンロードクエリでは、結果エンティティをデタッチし、それをワイヤで送信します。それが最善の方法であるかどうかはわかりません。

私は誰かが洞察力を提供してくれることを願っています。

+0

どのようにWCFサービス(自己ホスト型またはIISホスト型)をホストしているかを明確にし、ファイルに含まれているソリューション参照の意味を説明することができます。 –

+0

サイトはIISでホストされており、参照はEntity Frameworkのためファイルに関連しています。ファイルは別のテーブルにありますが、外部キーを介して情報テーブルにリンクされています。したがって、情報テーブルからリンクされたエンティティにアクセスするには、ファイル参照をロードする必要があります。遅延ロードが行われると、リンクをアンマウントできません。 – Johannes

+0

すべてのファイルがデータベースにあり、ファイルのエンティティタイプがあることを意味しますか?その場合、エンティティをデタッチしようとしたとき、その "ソリューション"エンティティまたはファイルエンティティはありますか?後者はうまくいくはずです。 – Marcanpilami

答えて

0

問題はおそらく変更追跡になります。これはデフォルトでオンになっています。

考えられる解決策:MergeOption.NoTracking

using (MyEntities _context = new MyEntities()) 
{ 
    _context.Widgets.MergeOption = MergeOption.NoTracking; 

    return _context.Widgets.ToList(); 

} 

このarticle

無効に変更の追跡は、上記のソリューションが動作しない場合は、この問題に対処する方法についての正しい方向を指すように役立つかもしれません。

私は最近、同様の問題で苦労しました。この問題は、文脈が私が使っていたオブジェクトへの参照を維持していることの結果でした(明らかに)。私が同じ種類のオブジェクトに変更を加えるたびに、たとえ新しいコンテキストで取得されたとしても(私は思ったので)、オブジェクトは変更されていました。

私の同僚の助けを借りて、IoCコンテナ(ウェブリクエストごとのライフスタイル)に登録しているため、文脈がぶら下がっていると判断しました。ライフスタイルを一時的に変更したとき(これは新しいインスタンスを提供していました)、同じタイプのオブジェクトへの変更は影響を受けませんでした。

これが役に立ちます。

+0

LOL ...男...あなたは2yrs以上前にこの質問を聞いていませんでした!私はあなたが今この問題を解決したと確信しています=)うまくいけば、答えは他の誰かを助けるでしょう。 – Rich

+0

ありがとうございました。私はそれを絶対に試してみる。私は最後に、私はちょうど質問に記載された "解決策"に固執したと思うが、これは私に何か新しいことを教えるかもしれない。 :D – Johannes

関連する問題