0

如果我有两个对象,比如 ProductOrder 和 Product,我希望它们都能够包含对另一个的多个引用,例如

一个产品可以被多个订单引用一个 ProductOrder 可以包含多个产品。

我试图这样做......

  <set name="Products" inverse ="true" cascade="save-update">
      <key column="OrderID"/>
      <one-to-many class="Product"/>
  </set>

public class ProductOrder
{
    private ISet<Product> products = new HashedSet<Product>();

    public virtual int ID { get; set; }
    public virtual Customer Customer { get; set; }
    public virtual int NumberOfProducts { get; set; }
    public virtual decimal TotalCost { get; set; }
    public virtual void AddProduct (Product product)
    {
        products.Add(product);
    }
    public virtual ISet<Product> Products
    {
        get { return this.products; } 
        set { this.products = value; }
    }        
}


<set name="Orders" lazy="true" table="ProductOrders">
  <key column="ProductID"/>
  <one-to-many class="ProductOrder"/>
</set>


public class Product
{
    //public virtual Guid Id { get; set; }  //Could use Guid, though it's not really readable and harder to find reference in the DB

    private ISet<ProductOrder> orders = new HashedSet<ProductOrder>();

    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
    public virtual string Category { get; set; }
    public virtual int Count { get; set; }
    public virtual bool Discontinued { get; set; }
    public virtual void AddOrder(ProductOrder order)
    {
        orders.Add(order);
    }
    public virtual ISet<ProductOrder> Orders
    {
        get { return this.orders; }
        set { this.orders = value; }
    }  
}

我只是无法让它像我期望的那样工作。有什么建议么?

4

2 回答 2

1

从您的代码中,我认为这不是一对多而是多对多的关系?看看http://nhibernate.info/doc/nh/en/index.html#collections-ofvalues

于 2009-03-23T16:34:10.967 回答
0

恕我直言,您不应该映射 Product.Orders 关系。通常,您不希望将潜在的大型集合映射到可能从数据库中提取大型集合的域对象上。

如果您的订单开始变大,您将开始遇到性能问题。

于 2009-03-23T11:34:27.117 回答