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)
问题是我可以从产品实体获取类别,但是当我尝试从类别中获取产品时,它不起作用且列表为空.
我不认为你可以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.
列表中的索引值应从零开始连续。我认为不可能对同一个表驱动的两个列表执行此操作。
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |