web-dev-qa-db-ja.com

C#4.0で使用するのに最適なORM

最良の方法は、NhibertateやEntity FrameworkなどのORMを使用するか、顧客ORMを実行することです。このORMをC#4.0プロジェクトに使用します

32
ma7moud

2016年更新

6年後、物事はまったく異なります。 NHibernateはすべて放棄され、他の選択肢は放棄されました(たとえば、Subsonic)、Entity Frameworkはおそらく最も一般的なフル機能のORMであり、人々は Dapper 最小限のオーバーヘッドでオブジェクトを照会します。

アプリケーションのシナリオも変更されました。メモリとパフォーマンスを犠牲にして1つの大きなオブジェクトグラフをロードおよびキャッシュする代わりに、WebサービスとREST APIは小さなリクエストを多数処理する必要があります。つまり、完全なORMのオーバーヘッドはありません長く受け入れられます。

これは、Active Record、リクエストごとのトランザクションなどのパターンとテクニックが、アンチパターンを殺すスループットとスケーラビリティになったことを意味します

最近の最も重要な機能の1つは、待機によるスレッドとCPUの無駄を減らすための非同期実行です。 NHibernateはこの移行を行いませんでした。

元の回答

「最高」を定義する:最も成熟した、より多くのドキュメント、より大きなコミュニティ、より多くの主流のものですか?

NHibernate はより成熟しており、機能が豊富で、より高度なコミュニティを備えており、MSが再び互換性を破ることを決定したときに中止されない可能性があります。 Entity Framework はより主流であり、すぐにサポートされます。 EFの初心者向けの本、NHの上級者向けの本があります。

良いオプションは、次のような単純なORMを試すことです。 サブソニック ORMの仕組み、さまざまな落とし穴、およびSELECT N+1は[:P]を意味します

独自のORMを作成しようとしないでください。すでに数十個あります! Subsonic、 Castle ActiveRecord 、NH、EF(もちろん)、 LLBLGenPro ...

64

お金を使うことができるなら、明確に LLBLGEn Pro 3. を見てください。

  • .NET 4.0を完全にサポートし、成熟した製品です。サポートも良いです。
  • 幅広いデータベースのサポート(Oracle、MS Sql、Firebird、MySql、PostgreSQL、Sysbase)
  • ニースのデザイナー、モデルの最初のサポート、データベースの最初のサポート

予算が少ない場合は、NHibernateを試してください。成熟した製品でもありますが、学習曲線は大きくなっています。サポートが必要な場合は、いつでもAyendeに電話できます:-)

小規模なプロジェクトには、EF 4.0が適しています。

13
Martin Fabik

一般的な観点からORMを最高のものと呼ぶことは完全に不可能です。それらはそれぞれ異なる観点から最適です。ニーズに最適なものを選択しました。 Linq2Sqlはパフォーマンスを考慮して書かれていますが、他のプロバイダーのサポートが不足しているため、Linq2Sqlは非常に高速です。しかし、SQLサーバーの処理に関してはLinq2Sqlほど高速ではないかもしれませんが、さまざまなプロバイダーをサポートしています。最良のアイデアは、プロジェクトにORMに必要な機能をリストし、すべてのニーズを満たす機能を選択することです。`これらの質問をして、プロジェクトに適切なORMを選択できます。

  • データベースプロバイダー ORMにサポートさせたいですか? SQL Server、MySQL、Oracleなど.
  • model-firstまたはdb-firstサポートが必要ですか?
  • パフォーマンス基準 [メモリ、処理]とは何ですか?
  • web-appまたはdesktop-appで使用しますか?
  • アプリケーションに分散クライアントがありますか?
  • そしてリストは続きます。

ほとんどのORMには、独自の長所と短所があります。

たとえば、Entity Frameworkには、フレームワーク自体に存在するという(巨大?)利点がありますが、かなり重量があり、立ち上げて実行するのが少し難しくなります(学習曲線が速い)。

非常に便利で使いやすい商用ORMがいくつかあります。現在、C#4プロジェクトで Lightspeed を使用していますが、この特定のシナリオでは非常に満足しています。

それは本当にあなたがORMから必要とするものに帰着します。セットアップと使用を非常にすばやく簡単にしたい場合は、Lightspeed、サブソニックなどが非常に便利です。フル機能が必要な場合は、Entity FrameworkとNHibernateが適切なオプションです。

8
Reed Copsey

C#アプリケーションを作成するときに、メインのORMとしてLinq-to-SQLを使用します。最終的にはEntity Frameworkに移りますが、今のところこれは本当に使いやすく、高速です。

2
Sergio Tapia

@thisに同意します。 __curious_geek正しいORMを選択することは要件に依存するということです。HibernateとEntity Frameworkの両方で機能しているので、後者はGUIベースのエディターであるため、ユーザーフレンドリーであると感じています。機能が豊富な点で、NHibernateには多くのデータベースプロバイダーをサポートできるという利点があります。また、NHibernateのカスタマイズは、Entity Frameworkの調整よりもはるかに簡単であることがわかりました。

ほとんどのツールがあなたのコア要件を満たしていると仮定すると、活気に満ちた魅力的なユーザーコミュニティとしてNHibernateを好むでしょう。

1
Bharath K