流畅的 nHibernate 映射问题

Posted

技术标签:

【中文标题】流畅的 nHibernate 映射问题【英文标题】:Fluent nHibernate Mapping issue 【发布时间】:2011-07-07 09:52:56 【问题描述】:

我有一个包含以下表格的数据库

用户 角色 UserInRoles(用于多对多关系的用户和角色的桥接表 模块 ModulePermission(这包括角色和模块的 PK 和一个 bool 字段,用于标识角色是否有权访问模块

现在我对流利的 nHibernate 中这些表的映射感到困惑,我按照Fluent nHibernate Wiki site 中的定义进行了映射,但出现此错误:

(XmlDocument)(3,6):XML 验证 错误:元素 'composite-id' 在 命名空间 'urn:nhibernate-mapping-2.2' 内容不完整。列表 预期的可能元素:'元, key-property, key-many-to-one' in 命名空间 'urn:nhibernate-mapping-2.2'.

映射: 用户地图:

public class UserMap : ClassMap<User>

    public UserMap()
    
        Table("tblUsers");
        LazyLoad();
        Id(user => user.UserID).GeneratedBy.GuidComb();
        Map(user => user.UserName).Not.Nullable();
        Map(user => user.Password).Not.Nullable();
        Map(user => user.IsActive).Nullable();
        HasManyToMany(user => user.RolesOfUser).Cascade.All().Inverse().Table("UserInRoles");
    

角色映射:

public class RoleMap : ClassMap<Role>

    public RoleMap()
    
        Table("tblRoles");
        Id(role => role.RoleID).GeneratedBy.Identity();
        Map(role => role.RoleName).Not.Nullable();
        Map(role => role.IsActive).Not.Nullable();
        Map(role => role.Description).Not.Nullable();
        HasManyToMany(role => role.Users).Cascade.All().Table("UserInRoles");
    

有人知道是什么问题吗?

谢谢

【问题讨论】:

已添加角色 n 用户的映射。 我建议您将hbm.xml文件写入文件夹以发现映射问题!看这里:Using Fluent NHibernate To Export / Create .hbm Files (NHibernate Mapping Files) 【参考方案1】:

当我定义父键列和子键列时,HasManyToMany 映射配置对我有用。你可以这样做:

HasManyToMany(user => user.RolesOfUser)
    .Table("UserInRoles")
    .ParentKeyColumn("UserID")
    .ChildKeyColumn("RoleID");

【讨论】:

以上是关于流畅的 nHibernate 映射问题的主要内容,如果未能解决你的问题,请参考以下文章

IList<int> 的流畅 NHibernate 映射?

流畅的 NHibernate HASMANY 映射,无需参考

使用 ADO.NET 流畅的 NHibernate 地图

使用NotFound.Ignore()的流畅Nhibernate映射禁用延迟加载和错误地获取数据

具有自然键的流畅 NHibernate 引用实体

流畅的 NHibernate。更改级联选项时是不是需要重新创建数据库?