真正的大师的简单问题。
我失去了很多时间来计算如何在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()
);
答案 0 :(得分:2)
文档说:6.1. Persistent Collections:
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
的实现。)
答案 1 :(得分:0)
NHibernate与IList和IList&lt; T&gt;一起使用。 (以及其他一些集合接口类型)因为内部NHibernate使用自己的接口实现来跟踪更改等。
从对象设计的角度来看,在域类中公开集合接口类型而不是具体的集合实现也是合理的。