2009-05-27 20 views
0

私は、Entity Framework 1.0を使用して2フェーズコミットのフォームを実現しようとしています。私は高いレベルで達成したい何Entity Frameworkに複数の変更を格納する

は次のとおりです。

  1. は、データベースからすべてのデータを取得し、キャッシュにこれを格納します。
  2. 個々のエンティティを変更する私は、これまでに遭遇した問題のは、関係なく、データベースに再び行くことになるだろうとのIQueryableをキャッシュすることは少し無意味であるということであるデータベース

にすべての変更をコミットします。したがって、他のオプションは、クエリの結果を格納するためにIEnumberableを使用することですが、それは1つのクエリを継承し、別のクエリにそれを洗練することを止めます。もう1つの問題は、EntityContextが期限切れになると(現在のhttprequestでそれを維持することができた)EntityContextが終了するとすぐに、変更は追跡できないということです。

誰もこれに似たようなことをやろうとしたことがありますか?

多くのおかげで、 マット・データベースからごIQueryable結果に

jumpingmattflash.co.uk

答えて

0

コール.ToList()。その後、他のクエリに絞り込むには、.AsQueryable()を使用します。これはあなたの最初の問題を解決するはずです。

2番目の問題については、解決策も探しています。私が理解しているように、Entity Frameworkの関係の基本的な実装は、System.Data.EntityアセンブリのSystem.Data.Objects名前空間のObjectStateManagerを中心に展開しています。次に、System.Data.Metadata.Edm名前空間のMetadataWorkspaceクラスを使用して、関係マッピングを検索します。これらは、基礎となるデータベース接続なしで使用できる可能性があります。そうであれば、複雑なオブジェクトグラフを更新するための非常にグルーヴィーなツールを提供します。

コンテキストに個別のエンティティと同様の方法でデタッチとアタッチがあるといいでしょう。 Entity Frameworkの次のバージョンでは、これらの特定のタイプの問題に焦点を当てるように見えます。エンティティとコンテキストを扱うときの自由度が増します。

1

IQueryableは、クエリ可能なオブジェクトであり、実際のデータではありません。

データを取得するにはToListを実行する必要があります。

コンテキストを開いたままにして、トランザクションスコープを使用できる場合は、何をしようとしているのかを実行できます。しかし、ほとんどの場合、これは不可能です。これにより、データベースがロックされ、他の問題につながることもあります。

行うには良い方法、それは次のようになります。

  • は、データベースコンテキスト
  • クライアントの
  • 処分からデータを読むすべての変更が必要となります
  • を開き、新しいコンテキスト
  • 読みますデータを再度
  • 第コンテキスト
  • 変更
  • コミット廃棄を設定するために変更されたデータからデータをコピーすることによって変更を加えます
  • 関連する問題