12

新しいプロジェクトを開始する場合、ORM NHibernate または LINQ に何を使用し、その理由を教えてください。それぞれの長所と短所は何ですか。

編集:LINQだけでなくLINQ to SQL(@Jon Limjapに感謝)

4

6 に答える 6

13

NHibernate の代わりに、かなりいいと思う WilsonORM について考えていたことを除いて、私は自分自身に非常によく似た質問をしました。

多くの重要な違いがあるように私には思えます。

リンク:

  • は完全な ORM ツールではありません (最新の Entity フレームワークのようないくつかの追加ライブラリを使用すると、そこに到達できます。個人的には、MS のこの最新テクノロジのアーキテクチャは、他の ORM フレームワークと比較して約 10 年前のものであると考えています)
  • 主にインテリセンスをサポートする「言語」をクエリしています(コンパイラはクエリの構文をチェックします)
  • 主に Microsoft SQL Server で使用されます
  • クローズドソースです

NHibernate:

  • ORMツールです
  • IntelliSense を使用しないクエリ言語はかなり限られています
  • DB プロバイダーがあるほとんどすべての DBMS で使用できます。
  • オープンソースです

それは本当に依存します。オブジェクトを構築し、それらを操作し、最後にそれらの変更を永続化する必要があるリッチ (Windows) デスクトップ アプリケーションを開発する場合は、NHibernate のような ORM フレームワークをお勧めします。

通常はデータをクエリするだけで、たまにしかデータを DB に書き戻さない Web アプリケーションを開発する場合は、Linq のような優れたクエリ言語をお勧めします。

いつものように、それは依存します。:-)

于 2008-09-10T04:45:41.680 に答える
10

エラー... NHibernate の LINQがあります。

おそらく、あなたが意味するのは、どちらを使用するかということです:

  • LINQ to SQL
  • NHibernate

私はNHibernateを好みます。

LINQ to SQL はかなり軽量ですが、テーブル構造にマップできるオブジェクト定義のタイプに関して非常に柔軟な NHibernate とは対照的に、データ構造との結合がもう少し緊密です。

もちろん、LINQ to SQL が役に立たないというわけではありません。まさにこの Web サイトで使用されています。データベース スキーマがそれほど大規模ではない小さなアプリケーションで起動して実行することは非常に役立つと思います。

于 2008-09-10T04:41:36.290 に答える
3

NHibernate から始めるのは悪い考えです。上手いセッティングだけでいいパフォーマンスを見せてくれます。大規模なプロジェクトには EFv4 を使用し、小規模および中規模のプロジェクトには L2S (おそらく第 3 部の製品) を使用してみてください。これらの製品は、NHibernate よりも便利で柔軟性があり、すぐに開始できます。

于 2010-12-02T16:21:50.643 に答える
2

完全なリストではありません

LinqToSQL プロ:

  • より良いツール サポート
  • 良い linq プロバイダー
  • db-schema == クラスの場合は簡単に開始できます -

短所:

  • 柔軟性がない (つまり、db-schema != クラス)
  • MS SQL Server のみをサポート
  • カスケードなし (保存、更新 ... 参照オブジェクトにカスケードしません)

NHibernate プロ:

  • 多くのrdbmsがootbをサポート
  • 豊富な機能
  • ほとんどすべてのコーナーケースに非常に柔軟に対応
  • オープンソース

短所:

  • 始めるのはそれほど簡単ではない
  • MSからではありません
  • 多くのツールがありますが、検索する必要があります

2 つの ORM の間

次の場合、LinqToSql を選択します。

  • データベーススキーマ == クラス
  • MS SQL Server のみを使用する
  • ショップは MS-Products のみを許可します

次の場合、Nhibernate を選択します。

  • より豊富なオブジェクトモデル
  • 従来のデータベース スキーマ
  • MS SQL Server 以外の DB または複数のサポート
  • パフォーマンスが重要 (NH には LinqToSql よりもパフォーマンスを最適化するための機能が多いと思います)

注:これは私の個人的な見解です。私は主に (クレイジーな) レガシー データベースと複雑な ETL ジョブを扱っており、SQL よりもオブジェクト モデルが大いに役立ちます。

于 2011-05-25T09:43:17.410 に答える
0

私はNHibernateを使用していません(または知っていません)。ただ証言したいだけです。約2年間、MySQLおよびPostgreSQLデータベースでLINQ to SQLを使用しています(WindowsでDbLinqを使用し、LinuxおよびMac OS XでMonoを使用しています)。

したがって、LINQ to SQL は Microsoft 製品に限定されません。

LINQ to SQL は、小規模および中規模のプロジェクト、またはデータベース構造を完全に制御できる大規模なプロジェクトに非常に適していることを確認できます。レビューが示すように、LINQ to SQL にはいくつかの制限があり、データベース テーブルとエンティティ クラスの間に直接のマッピングがない場合、LINQ to SQL は不適切なツールになります。

注 : LINQ to SQL は多対多の関係をサポートしていません (ただし、これは数行のコードで簡単に実現できます)。

于 2011-12-06T22:24:58.423 に答える
0

NHibernate の主な欠点は、メソッド呼び出しを利用できないことです。これらは SQL に変換できません。これを回避するには、難しい式ツリーを再作成する必要があります。

于 2012-06-27T14:58:12.223 に答える