NHibernate关系存在双向获取数据的问题

Evg*_*niy 6 .net c# nhibernate conform

我有2个表有多对多的关系.

实体代码

public class Product : BaseEntity
{     
    public virtual string Name { get; set; }
    public virtual IList<Category> ProductCategory { get; set; }
    public virtual float Price { get; set; }
    public virtual string Description { get; set; }
    public virtual DateTime DateOfAdd { get; set; }
    public virtual float Discount { get; set; }
    public virtual int SaleCount { get; set; }
    public virtual byte[] Image { get; set; }
}

public class Category : BaseEntity
{
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual IList<Product> CategoryProducts { get; set; }
    public virtual void AddProduct(Product product)
    {
        this.CategoryProducts.Add(product);
    }
    public virtual void DeleteProduct(Product product)
    {
        this.CategoryProducts.Remove(product);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在符合映射中将这些类映射为多对多.

  relationalMapper.ManyToMany<Product, Category>();
Run Code Online (Sandbox Code Playgroud)

在xml中,此映射编译为:

  <class name="Product">
    <id name="Id" type="Int32">
      <generator class="identity" />
    </id>
    <property name="Name" />
    <list name="ProductCategory" table="ProductCategory">
      <key column="product_key" />
      <list-index />
      <many-to-many class="Category" column="category_key" />
    </list>
    <property name="Price" />
    <property name="Description" />
    <property name="DateOfAdd" />
    <property name="Discount" />
    <property name="SaleCount" />
    <property name="Image" lazy="true" />
  </class>
<class name="Category">
    <id name="Id" type="Int32">
      <generator class="identity" />
    </id>
    <property name="Name" />
    <property name="Description" />
    <list name="CategoryProducts" table="ProductCategory" inverse="true">
      <key column="category_key" />
      <list-index />
      <many-to-many class="Product" column="product_key" />
    </list>
  </class>
Run Code Online (Sandbox Code Playgroud)

问题是我可以从产品实体获取类别,但是当我尝试从类别中获取产品时,它不起作用且列表为空.

Dan*_*ing 1

我不认为你可以list在两边都有一个many-to-many。只有一侧可以是 a list- 另一侧应该只是bagor set。考虑 ProductCategory 表中的以下数据:

Category_id Product_id Index
=========== ========== =====
1           3          0
1           4          1
2           3          0
2           4          1
Run Code Online (Sandbox Code Playgroud)

如果您访问Category.CategoryProducts,一切都很好。类别 #1 有两种产品:第一个产品是 #3,第二个产品是 #4。

但是,如果您尝试访问Product.ProductCategory,则同一Index列也不能用于此列表。我们的数据表明,产品 #3 有两个类别:#1 和 #2 - 但它们都希望成为列表中的第一个类别,带有Index = 0. 产品 #4 也有两个类别,但它们都不想成为列表中的第一个类别,因为它们都有Index = 1.

列表中的索引值应从零开始连续。我认为不可能对同一个表驱动的两个列表执行此操作。