NHibernateは大きくて強力ですが、NHibernateを使用して成功するために、NHibernateについてすべてを知る必要はありません。あなたの質問に答えるには:
すべての.NETmicro-ORMSには、私が知っているLINQサポートがなく、代わりにコードにSQL文字列を混在させることに依存しています。LINQを使用してクエリを構築すると、型の安全性、コンパイル時のチェック、および優れたリファクタリングが可能になります。すべてのクエリがSQL文字列を使用している場合は、何千ものクエリを含むコードベースをリファクタリングしてみてください...そうです!また、リファクタリングとは、新しい列や新しいテーブルなどを追加するだけの単純なことを意味します。これは、エンタープライズ環境で常に発生することです。文字列のリファクタリングは可能です。ストアドプロシージャに依存している人々はまだそうしなければなりませんが、型の安全性を自由に使えるのであれば、そうすることを選択しないでしょう。
遅延読み込みでは、覚えておく必要があるのはSELECT N+1シナリオを作成することだけです。ドメインオブジェクト/エンティティに対してforeachループを実行するコードがある場合は常に、オブジェクトに入力されたクエリが.Fetch()メソッドを使用していることを確認してください。このメソッドは、SQLでJOINを作成し、子オブジェクトに入力します。そうしないと、オブジェクトをforeachして子オブジェクトにドットを付けるときに、ORMは別のSELECTステートメントを実行してデータを「フェッチ」する必要があります。基本的に、NHibernateの用語では、熱心なフェッチはあなたの友達です。
バッチ処理は、NHibernateを使用したパイと同じくらい簡単です。NHibernate構成で、バッチ処理をオンにすると、それだけです。その後、必要に応じて、特定のクエリの実行時にバッチサイズを調整できます。
私は自分で第2レベルのキャッシングを利用したことがありません。私は大規模なエンタープライズ環境で作業しており、アプリはキャッシュを必要とせずに非常に高速に実行されます。NHibernateの第1レベルのキャッシュは、構成が不要であり、単に変更の追跡と考えることができます。基本的に、NHibernateは内部的に、データベースからすでに取得したオブジェクトと、データベースでの保存/更新が保留されているオブジェクトのディクショナリを保持します。最初のレベルのキャッシュは、私が実際に考えたことのないものですが、基本的なレベルでそれがどのように機能するかを知っておくのは良いことだと思います。
繰り返しになりますが、私は現在エンタープライズ環境で働いており、NHibernateを使用するあらゆる種類のアプリケーションがあります。かなり基本的なものもあれば、NHibernateが提供するすべての強力な機能を使用するものもあります。しかし、私の経験で私が通常見たのは、チームのすべてのメンバーがNHibernateの専門家である必要はないということです。通常、1〜3人の開発者は非常に知識が豊富で、他のすべての人はそれについて心配することなく、エンティティとマッピングを作成し、プログラミングを続行します。インフラストラクチャが整って、組織が使用したいパターンを整理したら、通常、すべてが簡単になります。
追加の考え:
NHibernateが本当に輝いている場所の1つは、あらゆる種類のクレイジーなデータベース設計をマッピングできることです。今では、ストアドプロシージャと別のテーブルを結合する必要がある、90年代初頭にまとめられたクレイジーなデータベース設計を簡単にマッピングできると言っているわけではありませんが、それは可能です。私は私の日にいくつかのクレイジーなマッピングを行いました。データベースが私たちが望んでいたことを実行するように設計されていないために不可能だと思った人もいましたが、毎回、永続性を持って、良いデータベース設計と悪いデータベース設計の両方をマッピングするNHibernateの信じられないほどの柔軟性でそれをうまくやってのけることができます。
Micro-ORMSを使用すると、通常、コードの横に大量のSQL文字列が埋め込まれることになります。それはどのようにクリーンで効率的であると考えられていますか。現在、すべての人がストアドプロシージャを配置するために使用しているものをコードに配置しているようです。私は実際にいくつかのプロジェクトでMicro-ORMを使用していますが、それは理にかなっていますが、通常は、複雑なWHERE句ではなく、1つのテーブルで単純なデータのみをクエリする場合です。
公平を期すために、私はNHibernateの詳細を学ぶためにかなりの時間を費やしてきましたが、仕事が必要だったからではなく、ただやりたかったからです。私は、NHibernateを毎日使用していて、十分に理解していない多くの人々と仕事をしています。しかし、繰り返しますが、彼らはそうする必要はありません。あなたはいくつかの基本的なことを知る必要があります、そしてあなたは行ってもいいです。
お役に立てれば。