2016-11-09 13 views
3

私は基本的なCRUD操作を行うためにEntity Framework 6を​​使用しています。私は、日付範囲内のオブジェクトを選択することができる必要がありますが、これはかなり簡単ですが、これらのオブジェクトは、前年のデータの本質的な倉庫であるいくつかのデータベースに分散させることができます。一度私たちは日付範囲でそれらを探しています。アーカイブデータベースでのEntity Frameworkの使用

例すべてのFooオブジェクトが2015年1月1日から2016年11月9日の間に必要です。 2015年のFooデータは別のデータベースに格納されます。これはすべて2005年に戻っています。すべてのスキーマが同一であるわけではありません。

には11個のEFプロジェクト、11個のコンテキストと11個の接続文字列があります。このソリューションでは、アーカイブを作成する毎にコードを追加する必要があるという問題があります。これはハックのようです。 Azureストレージ方式へのスワッピングは、近い将来、オプションではありません。

これ以上の優雅なソリューションはありますか?

答えて

2

クエリの対象となるエンティティに対して、すべてのデータベースに同じ(または類似の)スキーマがあれば、すべてのデータベースに対して単一のDbContextを持つことができます。接続文字列のリストを管理し、それらをループして、それぞれに接続し、それぞれにデータを照会する必要があります。もちろん、データベースに一貫性のある方法で名前が付けられている場合(たとえば、年に従って)、すべての接続文字列を維持する必要はありません。クエリが単一のDBにしか到達しない場合は、適切な接続文字列を計算して使用できます。これは標準的なシャーディング戦略のように見えるでしょう。 Hereは、MicrosoftのSQL Azureシャーディングライブラリ(EF用)の参考資料です。

また、SQL Serverのクロスデータベースクエリ機能を使用して、すべてのデータベースにわたってビューを設定することができます。これには保守上の問題がありますが、パフォーマンス上の問題はありませんが、データのサイズはわかりません。

+0

これは良い計画のようです。そこで、接続文字列(おそらくweb.config?)とスワップを調べるための正規表現を探しています。私が探しているテーブルのスキーマは、似ていますが同一ではありません。流暢に再マッピングしたり、私のマッピングを行うためにEFの規則に頼っているだけでしょうか? (+1しますが、私は<15ノブです) – Jimbob

+0

@ Jimbob実行時にEFを再マップすることはできませんので、複数の 'DbContext'を作成するか、エンティティを作成して、すべてのフィールド矛盾しているフィールドでNULLをチェックします。データアクセスレイヤーの前にアプリケーションレイヤーを置いて、データの一貫性のあるビューを提供することはうまくいくでしょう。 – flipchart

+0

毎年新しいコンテキストを検討していますか?私はDBAの1人に日付のパラメータを渡すことができるストアドプロシージャを使ってこれをサーバー側に並べ替えることを考えています。それは良いでしょうか? – Jimbob

関連する問題