2011-03-17 78 views
1

我有一個需要條件的HasMany映射。我有這個部分工作,但有一個更好的方式比我在做什麼。我正在使用的條件需要查看我要加入的另一個表上的屬性。我至今是:流利的NHibernate - 帶條件的HasMany映射

HasMany<MetaData>(x => x.MetaData).Table("MetaData") 
     .KeyColumn("DefinitionID") 
     .KeyColumn("TableID") 
     .Where("metadatade1_.SourceTable = 'Providers'") 
     .Cascade.SaveUpdate(); 

在上面的代碼,在where子句中引用「metadatade1_」,因爲它試圖完全限定的名字,那就是NH正在生成的名稱。我嘗試過使用「MetaDataDefinitions.SourceTable」(MetaDataDef ...是物理表名稱),也僅僅是「SourceTable」本身,但是這些都不起作用。

有沒有辦法不讓它嘗試和完全限定條件的名稱,只是通過「SourceTable ='提供者'」或者是否有一種方法,我可以讓它引用生成的名稱,而無需我手動插入它在?

回答

3

總之,沒有。 Where方法(和分別在HBM.XML中的where=屬性)只接受原始sql,因此很容易出現問題。

最好的選擇是不使用集合,而是依賴查詢來檢索元數據實例。

+0

不是我期待的,但謝謝你的答案!我會接受你的建議並建立一個查詢來檢索這些數據。 – Brosto 2011-03-17 17:02:03