我在 NHibernate 3.2 上使用 FluentNHibernate 1.3 映射了这个类:
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; }
}
所有映射都按预期正常工作。但是我需要使用 LINQ 进行查询,例如返回给定 ClassB 或 ClassA 实例中的所有 ClassC 实例,反之亦然。在获取 ClassC 列表之前,我需要在不加载任何 ClassB 或 ClassA 实例的情况下执行此操作,只需使用实例的 ID 进行查询。
我知道我可以加载,例如,一个 ClassB 实例,然后获取 ClassesC 集合,但是对于我的应用程序设计,我必须这样做而不这样做,我将使用它来处理诸如在网格上分页和其他不同的操作从分页。
在纯 SQL 上,我可以使用简单的连接查询来做到这一点,但我不知道如何使用 LINQ 来做到这一点。而且我不想要 HQL 或 ICriteria 的选项,它必须使用 LINQ(首选扩展)来完成,因为应用程序使用的插件必须不知道 NHibernate 的存在。该插件接收一个 IQueryable 实例来进行查询(这允许我们轻松地将核心应用程序移植到其他数据库模式,例如 NoSQL 或其他东西,甚至无需重新编译插件或应用程序的其他部分)。
提前感谢您的帮助。