2

真正大师的简单问题。我浪费了很多时间来弄清楚如何在 nhib 中映射集合。通过代码映射,我现在有疑问,为什么我的映射适用于类型集合IList而不是List?

这是代码

public class Account {
    private IList<Term> Terms; // When I use List it does not work
    public Account()
    {
       Terms = new List<Terms>(); 
    }
    public virtual IList<Term> Terms // When I use List it does not work
    {
       get { return _Terms; }
       set 
       { if (_Terms == value) return;
           _Terms = value;
       }
    }
}

AccountMap.cs(一个账户有很多条款)

Bag(x => x.Terms,
         m =>{},
         x => x.OneToMany()
);
4

2 回答 2

2

文档说:6.1。永久收藏

NHibernate 要求将持久集合值字段声明为接口类型

以及支持的接口列表:

实际的界面可能是Iesi.Collections.ISet, System.Collections.ICollection, System.Collections.IList, System.Collections.IDictionary, System.Collections.Generic.ICollection<T>, System.Collections.Generic.IList<T>, System.Collections.Generic.IDictionary<K, V>, Iesi.Collections.Generic.ISet<T>

或者......任何你喜欢的东西!(“你喜欢的任何东西”意味着你必须编写一个实现NHibernate.UserType.IUserCollectionType。)

于 2013-01-12T18:32:50.077 回答
0

NHibernate 与 IList 和 IList<T> (以及一些其他集合接口类型)一起使用,因为 NHibernate 在内部使用这些接口的自己的实现来跟踪更改等。

从对象设计的角度来看,在域类中公开集合接口类型而不是具体的集合实现也是合理的。

于 2013-01-12T17:58:21.167 回答