【发布时间】:2010-12-14 09:21:26
【问题描述】:
是的,这在here 和here 之前已经问过。我很好奇我正在考虑的方法在架构上是否合理。
首先让我尝试描述一下我想用我的对象模型做什么:
class Person {
ISet<Roles> Roles { get; set; }
}
class RoleDefinition {
string Name { get; set; }
}
class RoleAssignment {
RoleDefinition Definition { get; set; }
Person Person { get; set; }
}
class UserRole : RoleAssignment {
public virtual string Login { get; set; }
public virtual string Password { get; set; }
}
旨在能够通过以下方式处理角色:
// Find all "users" with a matching login
from user in userRolesRepository.FindAll(u => u.Login.StartsWith("abc"))
select user.Person;
为此,我正在考虑以下数据模型
Person table (Id, Name)
RoleDefinition table (Id, Name)
RoleAssignment table (Id, DefId, PersonId)
UserRole table (RoleAssignmentId, Login, Password)
AdminRole table (RoleAssignmentId, ...)
我会将 UserRole 和 AdminRole 作为joined-sublass 映射到 NHibernate 中的 RoleAssignment。
所以,这是 Person 与 UserRole 和 AdminRole 之间的 1:1,UserRole 和 RoleAssignment 之间的 1:1,以及 RoleAssignment 和 RoleDefinition 之间的 n:1。
我的问题是:这真的是一个好模型吗?
有没有更好的方法来对此进行建模,而不会失去每个角色拥有强类型、可查询属性的能力?考虑到随着我们的发展,我将在系统中添加更多角色,它的扩展性如何?
【问题讨论】:
标签: c# .net nhibernate data-modeling roles