2012-02-29 4 views
1

これはかなり長いものですが、私はあなたの考えと提案に非常に感謝しています。システム移行のための良い.NET ORMへのレガシーMySQLデータベースのマッピング

PHPとMySQLで書かれたレガシーシステムを再構築し、そのコンポーネントをC#とSQL ServerのASP.MVCに置き換えています。従来のアーキテクチャではが多く、が残っていて、スパゲッティコード、DBの参照整合性、未使用のコードとデータベースフィールド、そして一般的には悪いコーディングに深刻な問題があります。

私が好きなだけ、古いコードをすべて取り除いて置き換えることはできません。開発プロセス中に機能を維持する必要があるため、古いデータベースを使用しながら新しい機能を構築して、データが常に正確であることを保証する必要があります。データの正確さのレベルはリアルタイムではありませんが、2つのシステムがある場合は、100%の時間で同期する必要があります。古いシステムでは6つの異なるMySQLデータベースが使用されています。これらのデータベースはすべて同じサーバー上にあり、Linuxを実行しています。新しいシステム用の新しいサーバーでWindows 2008 R2を実行し、最新バージョンのSQL Serverを使用する予定です。

私が解決しなければならない問題は、これらのデータベースをすべて、C#で新しいシステムを開発するために使用できる統合モデルにマップする必要があることです。すべての機能をC#に移行したら、コードモデルと一致するDBにデータを移植する必要があります。このDBはSQL Server上で実行されます。私はまだ移行についてあまり心配していません。私の現在の問題は、これらの6つのMySQLデータベースを、新しい開発に使うことができるよく計画された単一のモデルにマップできるようにするORMツールを見つけることです。

新しいモデルでは、いくつかの段階でデータを移植するまで新しいMySQLデータベースに格納する必要があるフィールドが追加される可能性があるため、ORMは複数のテーブルやデータベースにまたがるエンティティの構築を容易にサポートする必要があります。

私がしようとしていることは可能ですか?それは努力の面で実行可能ですか?このすべてを行うことができるORMはありますか?他の方法は、積極的にシステム上で開発しながら会社の運用能力を維持するためにそこにありますか?

私はこれらのORMのオプションを見てきました:

  • 亜音速(素晴らしいが、私は、我々がしようとしている何のためにあまりにも軽量だと思う)
  • Entity Frameworkのは、(私があればこれを使用することができるかもしれないように見えるI
  • NHibernate(過去の悪い経験のためにクライアントがこれを使いたくない)
  • LLBLGen(私たちがやっていることができるようですそれを必要とするが、長期的な支援は、彼のクライアント)

私は見てみるべきことは何ですか?私が試すことができる別のアプローチはありますか?

+0

新しいデータベースを設計したり、テスト用にデータを移行/作成したり、新しいデータベースに対して開発したりする理由はありますか?その後、切り替えの準備ができたら、すべてのコンテンツを一度に移行し、新しいアプリに切り替えます。これは、直前の時点で持続層を切り替えるためにORMに頼るよりも簡単で、よく実装されたクリーンなモデルとデータベースに対して開発することができます。 – sga101

+0

こんにちは@ sga101、私たちは開発プロセスの間にビジネス価値を追加する必要があります。私たちが開発するにつれて、新しいユーザーインターフェイスにクライアントに新しい機能とフェーズを与えたいと思います。残念なことに、操作を停止するリスクが高すぎるため、開発を一度にやり直すことはできません。 –

答えて

0

ORMは、問題を解決するためのものではありません。つまり、質の高いORMは、ソリューションに向かっていくらかの割合を得ることになります。

NHibernateは簡単に選択できます。 LLBLGenが私の第二の選択肢になります。私はEFやSubSonicを気にしないでしょう。なぜなら、他の2つに比べて非常に機能が劣り、シナリオでまともな機能サポートが必要だからです。

マイグレーションの要件に合わせてカスタムコードを書くことに多くの時間を費やす必要があります。あなたのユースケースは、標準的でよく旅行されるパスではありません。 Entity Frameworkのために

0

:あなたは、静的なインタフェース(すなわち、同じシグネチャ)とストアドプロシージャの1つの完全なセットを維持するために準備している場合は、リンクサーバーで、SQL ServerのボックスでのTransact-SQLでそれらのすべてを実装することができ(へMySQLファーム)。

時が来

は、あなたがSQL Serverにデータを移行して、ストアドプロシージャを更新することができます。

基本的には、素敵なストアドプロシージャとの素敵なモデルを設計し、一時的な解決策として、ストアドプロシージャ内の任意の醜さを実装します。 MySQLが途絶えたら、ストアドプロシージャをより良いものに置き換えることができます。

SQL Serverは、リンクサーバーに対してクエリを実行しているときにリモートテーブル全体を取得する傾向があるため、パフォーマンスが懸念される場合は、すべてのストアドプロシージャがOPENROWSET(例Aの実行リモートサーバー上のクエリ)。

関連する問題