2012-03-05 6 views
1

モデルをバックエンドの実際のDBにリンクせずにEntity Framework 4.3を使用できますか?DBのないEntity Framework?

私はVSデザイナーでデータベースの概念モデルを構築し、次にさまざまなバックエンドデータベース(恐ろしいレガシーシステム)へのフェッチ、挿入、および更新を手動で処理したいと考えています。マップされていないテーブルを持っていないということに気づいているEFなしでこれを行うことができる必要があります。私はこれがやりたい非常に奇妙なことであることを認識しています...

私は、これらのレガシーシステムから適切に設計されたデータモデルと.NET環境に移行する必要がありますが、開発中に旧システムとの機能と下位互換性を維持する必要があります。次に、私が構築しているEFモデルと一致する1つのDBに古いデータ(約6種類のデータベースからのもの)をインポートできる段階に到達します。理論的には、ハッキングされたEFモデルから新しいデータ構造に適合する適切なEFモデルに切り替えることができます。

これは実行可能ですか? LINQを実際にデータベースに向けることなく、EFインターフェイスを使用することは可能ですか?

私は、生成されたDbContextをオーバーライドし、古いシステムを照会するIQueryableプロパティを公開することによって、レガシーシステムにクエリを実行できました。私の大きな戦いは、実際にデータを更新することです。

EFでエンティティの変更を追跡することはできますが、実際には変更を保存することはできません。コンテキスト上でSaveChanges()メソッドをオーバーライドして、さまざまなレガシーテーブルに手動で挿入できるようにする必要があります。

私はこの問題を抱えています。

UDPATE 2012年9月4日:EDMXファイルデザイナを使用してデータモデルを構築することを選択し、T4を使用してコードを生成しました。これにより私のニーズに合わせてマッピングコードを手動で書くことができます。また、従来のデータ移行を比較的簡単に実行することもできます。

+1

もちろん、何でも可能ですが、私はこのアプローチが実現可能ではないと確信しています。バックエンドデータベースを実装し、そこからレガシーシステム間のデータ相互運用を処理したくない理由はありますか?それはあなたが行こうとしている場所を得るための道具です。 –

答えて

0

私があなたの状況にあったなら、私は新しいDBサーバーをセットアップし、レガシーサーバーをそのサーバーにリンクします。 INSERT/UPDATE/DELETEのEFとのインタフェースをとるストアドプロシージャを作成します。このようにして、EFコードは従来のサポートの厄介さから分離されたままになります。レガシーDBサーバーを廃止すると、それに応じてストアドプロシージャを更新することができます。レガシーDBサーバがなくなったら、sprocsの使用を続行するか、EFデータ接続をリフレッシュしてテーブルスキーマを直接使用することができます。

0

エンティティフレームワークは、手動のデータなしでエンティティをデータストアにリンクすることです。 それ以外の場合は、linqでクラスを使用しているだけです。

sql serverやmo​​ngoなどのような別個のデータストアを必要としないようにするには、app_dataファイルにバンドルされたmdbファイルとしてデータベースを作成させます。これは、あなたが話すためにdatabsaeサーバを必要とせず、データベースがあなたのアプリの一部であることを意味します。

一方、データベースに別の方法で保存したい場合は、独自のデータアダプタを作成して、好きなように動作させることができます。 mongo .netエンティティフレームワークコンポーネントはこれの例です。

また、コードを使用するだけで、ストアドプロシージャを使用してデータベースに保存することができます。これは少し冗長でEFを迷惑にならせる可能性がありますが、ギャップを埋めることができ、モデルあなたはあなたのリポジトリの泥棒に翻訳されてほしいです。

新しいデータベースが準備完了したら、あなたのレポがsavechangesを使用するように修正して完了です。

これはもちろん、コードのみのアプローチでのみ動作します。

関連する問題