2010-02-11 67 views
0

我想在Fluent Nhibernate中將兩個表映射在一起,但加入它們的唯一方法是基於在其中一列上使用LEFT函數。所以SQL連接看起來像這樣:Fluent NHibernate多對一加入子字符串

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

有什麼辦法可以在NHibernate中映射這個嗎?

回答

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]]"); 

同樣,我不知道這會的工作,我沒有嘗試過這樣的事情我自己。