2011-02-05 56 views
0

我的列表VS IList的和其他收藏品的理解是相當有限的,所以我要問:NHibernate;的基礎知識雙向1:M,M:M和列表/ 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); 
    } 
} 

回答

2

只要你將它映射爲bag,那很好。

請記住,當持久化/加載時,NHibernate將用PersistentGenericBag替換List,所以總是編程到接口。

+0

「映射爲包」:這是否意味着我需要添加一些東西到映射?說它是:HasMany(x => x.Staff).Cascade.All();我需要修改這個?或者我可能不明白「包」的定義。 – bretddog 2011-02-05 12:34:27