流畅的NHibernate多对一加入子串

时间:2010-02-11 14:36:21

标签: sql-server database nhibernate orm fluent-nhibernate

我正在尝试在Fluent Nhibernate中将2个表映射到一起,但加入它们的唯一方法是基于在其中一个列上使用LEFT函数。所以SQL连接看起来像这样:

select * from TableA INNER JOIN TableB ON LEFT(TableA.ColA, 12) = TableB.ColB

有没有办法在NHibernate中映射这个?

1 个答案:

答案 0 :(得分:0)

我不是100%确定这实际上会有效。但它可能值得一试。假设你有ClassA和ClassB。 ClassA应该以您描述的方式引用ClassB。然后,您可以向ClassB添加一个属性,该属性应该包含LEFT sql语句的结果。以免现在称它为BKey。然后ClassB看起来像这样:

public class ClassB {
    public virtual string BKey { get; set; }
    //Other properties
}

然后,当您映射ClassB时,您可以将公式映射到属性BKey。这看起来像这样:

Map(x => x.BKey).Formula("(SELECT LEFT(b.[[columnname]], 12) FROM TableB as b WHERE b.Id = Id)");

这将获取该sql查询的结果并放入属性BKey。然后,当您为ClassA映射该引用时,您可以执行以下操作:

Reference(x => x.ClassB).PropertyRef(x => x.BKey).Column("[[TableAColumnName]]");

同样,我不确定这是否会奏效,我自己也没有尝试过类似的事情。