1

私はこれを解決しようとしていますが、今のところできません。あらゆる種類のエラー。

これらは私のdbテーブルです

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

私はこれにどのようにアプローチするかについて完全に迷っています。セット、バッグ、リストについてとても混乱しています...どこから始めればいいのかさえわかりません。

誰かが私にここで少しプッシュを与えることができますか?

ありがとう

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

次に、これら2つのエンティティの定義済みテーブルへの基本的なマッピングを示します。

<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>ペアテーブルでさえ独自の識別子を持っているという事実から利益を得ることができます。カスケードはnoneに設定されており、ロールがシステム内にあり、ユーザーはそれらにのみ割り当てられている(から削除されている)ことを想定しています。属性batch-sizeは、レイジーロールコレクションをフェッチするときに実行されるSELECTステートメントの数に影響します。

于 2012-11-27T05:14:38.613 に答える