NHibernate标准:与多级加入

时间:2018-07-30 12:08:50

标签: c# hibernate-criteria

我的数据库结构如下:

TABLE1
- IdTable2

TABLE2
- IdTable3

TABLE3

TABLE4
- IdTable3

DAO类如下:

public class Class1
{
 public virtual Class2 Class2 {get; set;}
}

以此类推...

我想使用C#中的NHibernete标准来连接这4个表。

以这种方式加入前三个表非常容易:

ICriteria criteria = this.SessionNHManager.CreateCriteria<Expedition>("T1");
criteria.CreateAlias<Class1>(i => i.Class2, "T2", JoinType.LeftOuterJoin);
criteria.CreateAlias<Class2>("T2", t => t.Class3, "T3", JoinType.LeftOuterJoin);

不幸的是,我无法以相同的方式加入第四张表,因为FK在Table3端而不在Table4端。

我认为也可以使用DetachedCriteria来完成,例如:

DetachedCriteria subquery = DetachedCriteria.For<Class4>("T4");
subquery.Add(Expression.EqPropertyL<Class3, Class4>("T3", h => h.Id, "T4", af => af.Class3.Id));
subquery.SetProjection(Projections.ProjectionList()    .Add(Projections.Property<Class4>("T4", af => af.Id))
                  );
criteria.Add(Subqueries.PropertyIn("Class2.Class3", subquery));

显然,当查询尝试执行时,最后一行是不允许的(编译是可以的)。我收到以下运行时错误:

could not resolve property: Class2.Class3 of: .Class1

Class1.Class2.Class3属性导航对我来说看起来很正常,尽管我看着DAO类(所有东西都声明为公共虚拟)。

我想Subqueries.PropertyIn无法处理2级导航。

您看到我写错了什么吗?还有其他方法可以执行此联接吗?

0 个答案:

没有答案