1

これが以前に回答されている場合はお詫び申し上げます。私はグーグルを試しましたが、答えが見つかりませんでした。

現時点では、私はクラスを持っています

public class User
{
    public virtual string Username { get; set; }
    public virtual string Name { get; set; }

    public virtual ISet<User> Teamleaders { get; set;}
    public virtual ISet<User> Staff { get; set;}
}

teamLeaders は、この 1 人のユーザーが持つすべてのチームリーダーを保存します。staff は、チームリーダーが持つすべてのスタッフを格納します。

これは多対多の関係です。

現在、私のXMLファイルは以下のとおりです

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               assembly="SDReward"
               namespace="SDReward.Domain">
  <class name="User">
    <id name="Username" />
    <property name="Name" />

  </class>
</hibernate-mapping>

次のデータで動作するようになりました。teamleaderstaff テーブルからデータを取得します

<set name="Teamleaders" table="teamleaderstaff">
  <key column="TeamleaderId" />
  <many-to-many column="UserId" class="User" />
</set>

<set name="Staff" table="teamleaderstaff">
  <key column="UserId" />
  <many-to-many column="TeamleaderId" class="User" />
</set>

しかし、挿入を行うと、データベースに二重に挿入されます...たとえば、1人のチームリーダーをユーザーに追加し、そのユーザーをチームリーダーのスタッフとして追加すると、同じデータで2つの挿入が行われます。

4

1 に答える 1

2

あなたの場合の多対多のマッピングは次のようになります

<set name="Teamleaders" table="teamleaderstaff" lazy="true">
  <key column="UserId"/>
  <many-to-many class="User" column="TeamleaderId"/>
</set>


<set name="Staff" table="teamleaderstaff" lazy="true" inverse="true" >
  <key column="TeamleaderId"/>
  <many-to-many class="User" column="UserId"/>
</set>

1) 違いは<key columnマッピングにあります。

2) の間、insertコレクションの 1 つ(Staff)が としてマークされてinverse="true"いるため、二重挿入はトリガーされません。

于 2013-06-08T18:30:07.000 に答える