为什么双向多对多关系的双方都不能成为HashSets?

时间:2011-01-29 02:05:14

标签: c# nhibernate fluent-nhibernate nhibernate-mapping many-to-many

我有两个实体:

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可以包含多个CategoriesCategory可以分配给多个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,但我仍然得到相同的例外。

0 个答案:

没有答案