0

こんにちは私はこの関係をどのように設定しますか?私はすでに多対多の関係を持っていますが、新しい機能を使用して、結合テーブルに列を追加する必要があります。

簡単にするために、Userクラス、Productクラス、UserProductクラスがあり、今日は次のようになっています。

Product.hbm.xml

<bag name="Users" table="users_products" inverse="true" cascade="save-update" >
  <cache usage="read-write" />
  <key column="ProductId" />
  <many-to-many class="User" column="UserId" outer-join="true" />
</bag>
<bag name="UserProduct" inverse="true" cascade="save-update">
    <cache usage="read-write" />
    <key column="ProductId" />
    <one-to-many class="UserProduct" />
</bag>

User.hbm.xml

<bag name="Products" table="users_products" inverse="true" cascade="save-update" >
  <cache usage="read-write" />
  <key column="UserId" />
  <many-to-many class="Product" column="ProductId" />
</bag>
<bag name="UserProduct" inverse="true" cascade="save-update">
    <cache usage="read-write" />
    <key column="UserId" />
    <one-to-many class="UserProduct" />
</bag>

カスケードはどのように見えるべきですか?新しい機能のために、新しいクラスUserProductを作成しました。

private int _id;
private User _user;
private Product _product;
private string _ownComment;

そして、UserProduct.hbm.xmlを作成しました

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="" assembly="">
  <class name="UserProduct" table="users_products">
    <cache usage="read-write"/>
    <id name="Id" column="UsersWhiskiesId" type="Int32" length="4" unsaved-value="0">
      <generator class="native" />
    </id>

    <many-to-one name="User" class="User" column="UserId" not-null="true" />
    <many-to-one name="Product" class="Product" column="ProductId" not-null="true" />

    <property name="OwnComment" column="OwnComment" type="String" />

  </class>
</hibernate-mapping>

以前にuser.Products.Add(product);を使用したことがある場合。今はどのようになりますか?ユーザーと製品をどのようにマッピングしますか?既存のレコードを更新するにはどうすればよいですか?ユーザーを削除するとき、製品ではなく製品への関連付けを削除したいと思います。

新しい質問: 登録ユーザーが製品を収集できるページがあります。このページでは、ユーザーがそこにある製品の一部を非表示にできるようにしたいと思います。グリッドビューにデータが入力され、チェックボックス付きのテンプレートフィールドがあります。「HideProduct」列があるUserProductを更新するにはどうすればよいですか。私はボタンにこのコードを持っています。

for (int i = 0; i < this.gvProducts.Rows.Count; i++)
        {
            GridViewRow row = this.gvProducts.Rows[i];
            bool isChecked = ((CheckBox)row.FindControl("chkSelect")).Checked;

            if (isChecked)
            {
                int productId= 

Convert.ToInt32(this.gvProducts.DataKeys[row.RowIndex].Value);
    UserProduct up= new UserProduct();
    up.User = this._user;
                up.Product= DataManagement.CoreRepository.GetObjectById<Product>(productId);
                up.HideProduct = isChecked;
                DataManagement.CoreRepository.UpdateObject(up);

助けてくれてありがとう!

4

1 に答える 1

2

データベースの場合と同様に、多対多の関係を2つの多対1の関係に分割する必要があります。

したがって、1人のユーザーには多くのUserProductアイテムがあり、1つの製品には多くのUserProductアイテムがあります。UserProductには、1つのユーザーと1つの製品があります。

于 2012-05-19T10:17:17.580 に答える