我正在尝试在Fluent Nhibernate中将2个表映射到一起,但加入它们的唯一方法是基于在其中一个列上使用LEFT函数。所以SQL连接看起来像这样:
select * from TableA INNER JOIN TableB ON LEFT(TableA.ColA, 12) = TableB.ColB
有没有办法在NHibernate中映射这个?
答案 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]]");
同样,我不确定这是否会奏效,我自己也没有尝试过类似的事情。