2011-05-23 176 views
0

我有類似下面的表結構:功能NHibernate映射對面

AttributeKey (ID, Title) 
AttributeValue (ID, AttributeKeyID, Value) 

我有我的映射中的所有設置,這樣如果我查詢的AttributeValue,它加入到AttributeKey(的AttributeValue .AttributeKeyID = AttributeKey.ID)使用引用,沒問題...但是,我想查詢AttributeKey表和LEFT JOIN到AttributeValue表上,這樣我就可以得到所有的AttributeKeys以及與它們相關的任何值...我如何映射這在流利的nHibernate中?

本質上它是引用映射的反向。

編輯:我意識到的hasMany方法,就是要參考的反向,但使用拋出我的財產沒有實現UserCollectionType

乾杯

回答

1

這應該是一個的hasMany例外在你的AttributeKey ClassMap中。你的類應該是這個樣子:然後

public class AttributeKey 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public IList<AttributeValue> AttributeValues { get; set; } 
} 

你的映射是這樣的:

public class AttributeKeyMap : ClassMap<AttributeKey> 
{ 
    public AttributeKeyMap() 
    { 
     Id(x => x.Id, "ID"); 
     Map(x => x.Title); 
     HasMany(x => x.AttributeValues) 
      .KeyColumn("AttributeKeyID") 
      .Inverse() 
      .Cascade.AllDeleteOrphan(); 
    } 
} 
+0

感謝科爾。我在那裏做的查詢每個AttributeKey只有一個或0個AttributeValues - 我必須將它映射到IList屬性才能使用它? – johnnyboy 2011-05-23 22:22:37

+0

那麼你的數據庫設計並沒有指定一對一的關係。如果需要,可以創建一個新的只讀屬性,該屬性未映射到從AttributeValues IList獲取第一個元素的數據庫(如果存在元素),否則返回null。 – 2011-05-24 02:06:35