У меня есть две сущности:
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>();
}
}
A 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: коллекция не может быть нулевой. Имя параметра: c
Я точно определил проблему с типом коллекции Category.Products
. Если я изменю его на List
, он будет работать нормально, но если я сделаю его HashSet
, он выдаст исключение. Почему обе стороны двунаправленного отношения не могут быть HashSet
, и почему обратная сторона должна быть не HashSet
? Я попытался сохранить Category.Products
как HashSet
, и я изменил Product.Categories
на List
, но я все еще получаю то же исключение.