嗨,我想返回一个建筑领域的集合.
private long _id; private string _buildingName; private IList_rooms;
我正在使用NHibernate和这个房间的映射
而我这样称为db;
Buildings = (List)session.CreateCriteria(typeof(Building)).AddOrder(Order.Asc("buildingName")).List ();
问题是我不希望_rooms集合成为IList,但我需要它作为List.唉,NHibernate要求我为集合使用Interface.知道如何做到这一点.我是.Net的新手,并认为可能放弃NHibernate可能是前进的方向.我只需要将集合输入为List,这样我就可以继续了.任何帮助非常感谢.
这不是NHibernate的工作方式.您无法告诉它您的域模型对象的具体类型是什么.您只能告诉它基本类型和接口是什么.然后它可以选择如何有效地实现域类型.
例如,NHibernate使用自己的内部实现IList
,知道如何进行延迟加载.
而且,NHibernate使用自己Building
的域模型内部实现.并不一定就是Building
你将使用NHibernate的所有对象都具有它们的具体类型Building
.它们将是Building
s,无论Building
是对象的具体类型,还是它是对象的具体类型的基本类型,它们都是真的.
但这是正确的做法,因为无论如何你应该使用接口和基类型而不是具体类型.NHibernate帮助您使用所有正确的编程方法.
现在,为什么你需要一个List
?为什么IList
不够?
为什么你需要一个具体的List
物体,什么时候你可以做你想要的一切IList
?
如果它必须是一个具体的列表,你有两个选择.
首先,简单地转换IList
为List
.这只有在基础类型是 a 时才有效List
,我个人对此表示怀疑.
其次,调用ToList()扩展方法:
Buildings = (List)session.CreateCriteria(typeof(Building)).AddOrder(Order.Asc("buildingName")).List ().ToList();
我个人建议你不要这样做,而是使用IList.