嗨,我將如何建立這種關係?我alreade有一個多對多的realtionship,但現在我需要在連接表中添加一個額外的列的新功能。多對多連接表上的額外列
爲簡單起見,我有一個User類,產品類和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(產品); 現在它會是什麼樣子? 我將如何映射用戶和產品? 我如何更新感興趣的記錄? 當我刪除用戶時,我想刪除與產品的關聯而不是產品。
新問題: 我有一個頁面,註冊用戶可以收集產品。在這個頁面上,我現在希望用戶能夠隱藏某些產品。我有一個gridview填充和一個複選框的templatefield。如何更新UserProduct,其中有一列「HideProduct」。我有一個按鈕中的代碼。
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);
感謝您的幫助!
檢查我的新問題。我已經完成的映射。 – Thommie