我试图解决这个问题,但到目前为止还没有。所有的错误。
这些是我的数据库表
人(personID,姓名,年龄)
角色(roleID,roleName)
PersonRoles(personRolesID,personID,roleID)
这是我的域类
public Person
{
public virtual Roles RolesForThisPerson {get;set;}
public virtual string Name {get;set;}
public virtual int Age {get;set;}
}
public Roles
{
public virtual IList<string> RoleList {get;set;}
}
我完全迷失了如何处理这个问题。我对套装,包包,清单感到困惑......我甚至不知道从哪里开始。
任何人都可以在这里给我一点推动力?
感谢
答案 0 :(得分:2)
让我们按原样保留数据库架构并首先调整C#域类:
public class Person
{
public virtual string Name {get;set;}
public virtual int Age {get;set;}
public virtual IList<Role> RolesForThisPerson {get;set;}
}
public class Role
{
public virtual string RoleName { get; set; }
}
现在将这两个实体的基本映射到已定义的表中:
<class name="Person" table="Person" lazy="true">
<id name="ID" column="personID">
<generator class="native" />
</id>
<property name="Name" not-null="true" />
<property name="Age" not-null="true" />
<!-- placeholder for roles -->
</class>
<class name="Role" table="Role" lazy="true">
<id name="ID" column="roleID">
<generator class="native" />
</id>
<property name="RoleName" not-null="true" />
</class>
现在我们可以使用<idbag>
映射并以这种方式扩展Person
类映射:
<idbag name="RolesForThisPerson" batch-size="25" table="PersonRoles"
inverse="true" lazy="true" cascade="none" >
<collection-id column="personRolesID" type="System.Int32" >
<generator class="native" />
</collection-id>
<key column="personID" />
<many-to-many class="Role" column="roleID" />
</idbag>
<idbag>
可以从事实中获益,即使对表也有自己的标识符。 Cascade设置为none,期望角色在系统中,并且仅将用户分配给它们(从中删除)。在获取惰性角色集合时,属性batch-size
将影响执行的SELECT语句数。