NHibernate的;双向1:m,m:m和List / IList的基础知识

时间:2011-02-05 11:42:36

标签: c# .net database nhibernate fluent-nhibernate

我对List vs IList和其他集合的理解非常有限,所以我需要问:

NHibernate documentation说:

请注意,NHibernate不支持与索引集合(列表,映射或数组)的双向一对多关联作为“多”端,您必须使用集合或包映射。

以下课程的实施是否尊重此限制?换一种说法;在将属性初始化为具体列表时,将属性声明为IList是否足够?或者我需要使用不同类型的集合?

我可以使用任何容器的特定实现,还是必须是一个接口?

示例来自FluentNHibernate tutorial,所以我认为它会没问题,但我想更深入地了解它,而不仅仅是在此基础上接受它。

public class Store
{
  public virtual int Id { get; private set; }
  public virtual string Name { get; set; }
  public virtual IList<Product> Products { get; set; }
  public virtual IList<Employee> Staff { get; set; }

  public Store()
  {
    Products = new List<Product>();
    Staff = new List<Employee>();
  }

  public virtual void AddProduct(Product product)
  {
    product.StoresStockedIn.Add(this);
    Products.Add(product);
  }

  public virtual void AddEmployee(Employee employee)
  {
    employee.Store = this;
    Staff.Add(employee);
  }
}

1 个答案:

答案 0 :(得分:2)

只要您将其映射为bag,就可以了。

请记住,在持久/加载时,NHibernate会将List替换为PersistentGenericBag,因此请始终编程到界面。