为什么我的映射与IList而不是LIst一起工作

时间:2013-01-12 17:53:50

标签: c# nhibernate

真正的大师的简单问题。 我失去了很多时间来计算如何在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()
);

2 个答案:

答案 0 :(得分:2)

文档说:6.1. Persistent Collections

  

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

支持的接口列表:

  

实际界面可能是Iesi.Collections.ISet,   System.Collections.ICollectionSystem.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的实现。)

答案 1 :(得分:0)

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

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