2

私は多くのレガシーシステムを統合する過程にあります。それらはそれぞれ異なるデータベースを持っています。そして私はそれらのほとんどのためにデータアクセスコードを書く必要があるでしょう。

データベーススキーマは変更できません(いくつかのインデックスなどを適用できる場合がありますが、テーブルとその列は構造を保持する必要があります)。一部のデータベースは、適切な関係と主キー/外部キーを備えたOK設計であり、他のデータベースの一部は、それを非常に欠いています。

このタスクにはどのORMを選択しますか?プロジェクト全体で同じORMを使用したいと思います。そして私の要件は次のとおりです。

  • コード内のテーブルまたは列の名前を変更する機能。ただし、データベースには古い名前を保持します。
  • 合理的なコード生成
  • 効率的なLINQサポート(データモデルに対するLINQクエリは効率的なSQLに変換する必要があります)。
  • 生成されるデータクラスは、できればPOCOのものである必要があります。
  • できれば、さまざまなデータベースエンジンのサポート。

私は現在、LINQ-To-SQLの経験が最も豊富です。しかし、私はそれがこのプロジェクトにとって間違った選択かもしれないと感じています。私は新しいフレームワークを学ぶことに少し時間を費やすことをいとわない。

4

6 に答える 6

3

推測では、ORMはそれが節約するよりも多くの問題を引き起こす可能性があると思います。いくつかの異なるレガシーデータベースがあり、それらのいくつかが不十分に設計されている場合は、ORMよりも低いレベルでデータアクセス層を構築する方が簡単な場合があります。Fowlerのエンタープライズアプリケーションアーキテクチャのパターンは、データアクセスレイヤーを構造化するためのさまざまなアプローチをカタログ化するのに非常に優れています。

一部のデータアクセス層は、コード生成ソリューションに適している場合があります。ただし、さまざまなスキーマの存在(あなたが言うように厄介なものもあります)は、万能のアプローチが機能しないか、すべてのレガシーデータベースでうまく機能するようにするための不釣り合いな努力を伴う可能性があることを示唆しています。

于 2009-04-11T12:44:47.710 に答える
1

nHibernate が最善の策です。POCO サポートを提供し、私が知っているすべてのデータベースのサポートが含まれており、LINQ サポートは十分すぎるほどです。マッピング ファイルを生成したいと思われるかもしれませんが、mygeneration と codesmith 用のテンプレートが公開されており、それを行うのに役立ち、大量の手作業を回避できます。(最初の世代の後、ほとんどの世代ベースのフレームワークでははるかに困難なテーブル名、関係などを微調整して変更するのは簡単です)

于 2009-04-11T13:37:32.747 に答える
0

私の意見では、最も重要な要素は、ドメインモデルを実装するか、テーブルをデータ転送オブジェクト(DTO)に直接マップするかどうかです。ドメインをモデル化する場合は、NHibernateを絶対にお勧めします。DTOを使用する場合は、EntityFrameworkやDataTablesなどの多くの優れた候補があります。

于 2009-04-11T12:54:50.993 に答える
0

LINQ to SQLは、SQLServerでのみ機能します。ADO.NET Entity Frameworkは、ADO.NETでサポートされているすべてのデータベースで動作します。

私があなたのリストに実装されていないのは、クラスがPOCOではないということだけです。特に、実装固有のデータもシリアル化されるため、そのうちの1つをWebサービスで公開することはお勧めできません。

于 2009-04-11T12:43:54.313 に答える
0

nHibernateはほとんどの要件に適合します。唯一の制限はlinqです。ただし、linqクエリのサポートの追加に取り組んでいるスポンサーから寄付されたフルタイムの開発者がいます。

それは多くのデータベースエンジンをサポートします、それは無料です、それはPOCOを使うことができます。さまざまなピースを拡張可能にするためのフックがたくさんあります。

于 2009-04-11T12:48:11.057 に答える
0

あなたはC#で作業していると思いますか?

SubSonic を試してみてはいかがでしょうか。データベースがすでに存在する場合、特にストア プロシージャとビューを扱う場合は、これが適しています。nHib のように構成する xml はなく、数時間 (または、何をしているかわかっている場合は 20 分) で起動して実行できます。いくつかのデータベースもサポートしています。

Rob and Co.が現在追加していると私が信じているLinqの部分は、そこにもあるかもしれませんが、それは私がまだ試していない最新のものの一部です.

http://subsonicproject.com/

于 2009-04-11T14:36:00.953 に答える