FluentNHibernate 1.3 を使用して NHibernate 3.2 にマッピングされたこのクラスがあります。
public class ClassA
{
public virtual Int32 Id{ get; }
....
public ICollection<ClassB> ClassesB { get; }
public ICollection<ClassC> ClassesC { get; }
}
public class ClassB
{
public virtual Int32 Id{ get; }
....
public ICollection<ClassA> ClassesA { get; }
public ICollection<ClassC> ClassesC { get; }
}
public class ClassC
{
public virtual Int32 Id{ get; }
....
public ICollection<ClassA> ClassesA { get; }
public ICollection<ClassB> ClassesB { get; }
}
すべてのマッピングが正しく機能し、仕様どおりに機能します。しかし、たとえば、特定の ClassB または ClassA インスタンス内のすべての ClassC インスタンスを返すクエリを LINQ で作成する必要があります。ClassC のリストを取得する前に、ClassB または ClassA インスタンスをロードせずにこれを行う必要があります。インスタンスの ID を使用してクエリを作成するだけです。
たとえば、ClassB インスタンスをロードしてから ClassesC コレクションを取得できることはわかっていますが、アプリケーションの設計では、それを行わずにこれを行う必要があります。これを、グリッドでのページングやその他のさまざまな操作に使用します。ページングから。
純粋な SQL では単純な結合クエリでそれを行うことができますが、LINQ でそれを行う方法がわかりません。また、HQL または ICriteria のオプションは必要ありません。アプリケーションは NHibernate の存在を認識してはならないプラグインを使用するため、LINQ (拡張機能が望ましい) で行う必要があります。プラグインは、クエリを作成するために IQueryable インスタンスを受け取ります (これにより、プラグインやアプリケーションの他の部分を再コンパイルすることなく、コア アプリケーションを NoSQL などの他のデータベース スキーマに簡単に移植できます)。
事前にご協力いただきありがとうございます。