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