我有两个实体:
public class Product
{
public virtual ICollection<Category> Categories { get; protected set; }
public Product()
{
Categories = new HashSet<Category>();
}
}
public class Category
{
public virtual IEnumerable<Product> Products { get; protected set; }
public Category()
{
Products = new HashSet<Product>();
}
}
Product
可以包含多个Categories
,Category
可以分配给多个Products
。虽然这种关系可以表示为单向多对多,但我希望能够删除Category
并让NHibernate自动从所有Products
中删除该类别,NHibernate可以如果这种关系只是单向的话,那就不行了。
我在Fluent NHibernate中有两个类映射:
public class ProductMap : ClassMap<Product>
{
HasManyToMany(x => x.Categories).AsSet();
}
public class CategoryMap : ClassMap<Category>
{
HasManyToMany(x => x.Products).AsSet().Inverse();
}
但是,每当我尝试保存新的Category
时,我都会遇到以下异常:
ArgumentNullException:Collection不能为null。参数名称:c
我将问题指向Category.Products
的集合类型。如果我将其更改为List
,它可以正常工作,但如果我将其设为HashSet
,则会抛出异常。为什么双向关系的双方都不能HashSet
,为什么反面必须是非HashSet
?我尝试将Category.Products
保留为HashSet
,我将Product.Categories
更改为List
,但我仍然得到相同的例外。