【问题标题】:Fluent NHibernate question流畅的 NHibernate 问题
【发布时间】:2010-03-30 03:52:46
【问题描述】:

假设您有两个表,“Users”和“UserRoles”。以下是这两个表的结构(表 - 列):

用户 - 用户 ID (int)

UserRoles - 用户 ID(整数)、角色(字符串)

我想要的是让我的域中的“用户”类拥有一个 IList 角色。如何构建我的 Fluent NHibernate 映射来实现这一点?

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    您正在寻找的是一组元素中的一个,在标准 hbm 映射中是:

    <set name="Roles" table="UserRoles">
      <key column="UserID" />
      <element column="Role" />
    </set>
    

    对于 Fluent NHibernate,您可以这样映射:

    HasMany<string>(x => x.Roles)
      .AsElement("Role");
    

    您可能还需要使用WithKeyColumn(string) 指定密钥名称。

    【讨论】:

      【解决方案2】:

      FWIW 这在今天发生了细微的变化。当前映射是

      HasMany<string>(x => x.Roles)
        .Element("Role");
      

      【讨论】:

        【解决方案3】:

        我相信会是这样的

        public User()
          {
            Id(x => x.UserID);
            HasMany<UserRoles>(x => x.UserRoles).AsBag();
          }
        

        您还必须确保映射您的 UserRoles 类

        【讨论】:

        • 问题是 UserRoles 不是一个类。它只是一个字符串列表。数据表没有链接两个外键,只有一个外键(UserID)和一个角色名称(字符串)。
        【解决方案4】:

        这也有效:

        HasMany<Role>(u => u.Roles)
                        .WithTableName("UserRoles")
                        .Component(role => role.Map(r => r.Name))
                        .AsList();
        

        您不需要映射 Role 或 UserRoles。

        确保 Role 实现 IEquatable &lt; Role &gt; ;.

        【讨论】:

          猜你喜欢
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多