流畅的nHibernate将三个表映射到一个类

时间:2011-02-21 12:36:31

标签: fluent-nhibernate mapping multiple-tables

我在自定义授权实施中创建用户角色时遇到问题。 不幸的是,我正在处理其他应用程序使用的设计非常糟糕的遗留数据库,我真的不想重新编码数据库和其他应用程序。

下面我列出了我希望用户和UserPermissionGroup类的外观。

public class User
{
  public virtual int Id { get; set; }
  public virtual int Name { get; set; }
  public virtual int Email { get; set; }
  public virtual int Password { get; set; }

  protected virtual IEnumerable<UserPermissionGroup> PermissionGroups { get; set; }

  public virtual book IsInRole(string role)
  {
    // code to check with PermissionGroups if user is in one of the required roles
  }
}

public class UserPermissionGroup
{
  public virtual string Role { get; set; }
  public virtual bool CanAccess { get; set; }
  public virtual string SiteCode { get; set; } // optional field - depends on perm type in DB
}

不幸的是,我的(缩写)数据库结构如下:

People
{
  ID (PK, int)
  Name (varchar)
  Email (varchar)
  Password (varchar)

  PeopleTypeId (FK, int)
  IsSuperAdmin (bit)
  IsSiteAdmin (bit)
  IsUserAdmin (bit)
}

PeopleTypes
{
  PeopleTypeId (PK, int)
  TypeName (varchar)
}

Perm2People
{
  PeopleId (PK, FK, int)
  GroupID (PK, FK, int)
}

PermGroups
{
  GroupID (PK, int)
  GroupName (varchar)
}


Perms4Sites
{
  PeopleID (PK, FK, int)
  SiteCode (PK, FK, char(3))
  Section (PK, char(1))
  AccessLevel (int) 
}

在Perms4Sites中:

  • SiteCode与管理区域正在管理的其中一个站点相关。
  • Section是管理员不同部分的1个字符代码(与角色相关)
  • AccessLevel 0-3取决于一个人对该部分的权限(即读,写,发布)。目前我们不需要知道soemone的访问级别 - 只要他们有0以外的其他内容。

我想将所有权限类型表(以及People表中的行)的映射添加到一个UserPermissionGroup类中。我只需要读取这些表 - 不需要写入数据库。

有谁知道如何将这个数据库结构的映射编写成更有用的东西,比如我上面的理想类模式?

感谢您的帮助 Saan

1 个答案:

答案 0 :(得分:0)

我的一位同事指出我这样做太复杂了,我应该为所有映射编写一个sql视图。