使用NHibernate,我该如何映射以下场景:
public class User
{
public virtual IDictionary<Project, IList<Role>> ProjectAssignments { get; set; }
}
在数据库中,我有User
,Project
和Role
的单独表格以及关系的第四个表格。
任何帮助都将不胜感激。
答案 0 :(得分:1)
你不能 - 从Ayende's blog discussing <map>
我想指出,我还没有涵盖&lt; map /&gt;的所有选项 甚至更多的选择(尽管,IDictionary&lt; K,IList&lt; V&gt;&gt;不是什么了 可能需要映射,以便执行此操作所需的有问题的SQL语句。
您需要一些中间实体/组件。我可能有一个ProjectAssignment实体来打破用户,项目和角色之间的关联 - 随着时间的推移它可能会增加额外的属性(假设你想跟踪一段时间内对分配的更改,所以它得到{{1 }}和StartDate
属性)。
类似的东西:
EndDate
我只是将ProjectAssignment映射为一个持久化的类,而User.Assignments集合作为正常的一对多的任何风格。最后,我添加了一个方法来将细节提取到字典中(或者如果你使用的是Framework v3.5,可能还有ILookup):类似于:
public class User {
// ... other attributes etc.
public virtual ISet<ProjectAssignment> Assignments {get;set;}
}
public class Project {
// ... other attributes etc.
public virtual ISet<ProjectAssignment> Assignments {get;set;}
}
public class Role {
// ... other attributes etc.
}
public class ProjectAssignment
{
public virtual Int64 {get;set;}
public virtual User User {get;set;}
public virtual Project Project {get;set;}
public virtual Role Role {get;set;}
// ... other attributes etc.
}