2

我試圖創建一個IDictionary上使用另一個類作爲關鍵的對象。流利的NHibernate字典映射

' Dictionary Mapping on Tool 
    HasMany(Function(x) x.Roles).KeyColumn("ToolRole_ID").AsEntityMap("RoleType_ID").Inverse.Cascade.AllDeleteOrphan().Table("ToolRoles") 

' RoleType Mapping 
Public Sub New() 
    Id(Function(x) x.ID).GeneratedBy.GuidComb().Column("ToolRole_ID") 
    References(Function(x) x.Tool).Not.Nullable.Column("Tool_ID") 
    References(Function(x) x.RoleType).Not.Nullable.Column("RoleType_ID") 
    References(Function(x) x.User).Not.Nullable.Column("User_ID") 
    Map(Function(x) x.LastModified).Not.Nullable() 
    Table("ToolRoles") 
End Sub 

我不再得到任何感謝這個帖子映射錯誤:How to map this Dictionary with the newest fluentNHibernate version?,但我的收藏沒有被填充,即使我知道它有子對象。

有什麼建議嗎?

回答

1

因爲RoleType是ToolRole的屬性,所以您可以嘗試標準的Map語法。

HasMany(Function(x) x.Roles) 
    .KeyColumn("ToolRole_ID") 
    .AsMap(Function(x) x.RoleType) 
    .Inverse() 
    .Cascade.AllDeleteOrphan(); 
+0

謝謝,我想我想這一次,但可以肯定我再次做到了,我得到了以下錯誤:'{「無法確定類型:ToolDatabaseLib.RoleType,ToolDatabaseLib,版本= 1.0.0.0 ,Culture = neutral,PublicKeyToken = null,對於列:NHibernate.Mapping.Column(RoleType)「}' – Origin 2012-07-29 22:38:09

+0

然後在NHibernate中啓用SQL日誌記錄,並直接運行生成的映射的SQL查看它是否返回您期望的結果。 – Firo 2012-07-30 05:40:29

+0

對此延遲接受感到抱歉。提出這個問題的原因實際上已經消失了,所以我沒有代碼去處理。我只是做了另一個字典映射,它運行良好。有一點需要注意的是,如果屬性的列名與屬性名稱不匹配,則不應使用lambda函數來指定要公開的屬性。我的工作映射是'.AsMap(of String)(「task_name」)''而不是'.AsMap(function(x)x.Name))' – Origin 2012-08-16 20:21:34