1

我正在努力解决这个问题,但到目前为止还不能。各种错误。

这些是我的数据库表

人(personID、姓名、年龄)

角色(角色 ID、角色名称)

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;}
}

我完全不知道如何处理这个问题。我对套装、包、清单感到很困惑……我什至不知道从哪里开始。

任何人都可以在这里给我一点推动?

谢谢

4

1 回答 1

2

让我们保持 DB 模式不变并首先调整 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 语句。

于 2012-11-27T05:14:38.613 回答