我对List vs IList和其他集合的理解非常有限,所以我需要问:
请注意,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);
}
}
答案 0 :(得分:2)
只要您将其映射为bag
,就可以了。
请记住,在持久/加载时,NHibernate会将List
替换为PersistentGenericBag
,因此请始终编程到界面。