【发布时间】:2010-04-19 20:37:05
【问题描述】:
我有一个接口IUserLocation 和一个具体类型UserLocation。
当我使用 ICriteria 时,指定 interface IUserLocation,我希望 NHibernate 实例化 concrete UserLocation 类型的集合。
我使用table per concrete type 策略创建了一个 HBM 映射文件(如下所示)。但是,当我使用 ICriteria 查询 NHibernate 时,我得到:
NHibernate 无法实例化抽象类或接口 MyNamespace.IUserLocation
谁能明白这是为什么? (NHibernate的相关位源代码here(我认为))
我的 ICriteria:
var filter = DetachedCriteria.For<IUserLocation>()
.Add(Restrictions.Eq("UserId", userId));
return filter.GetExecutableCriteria(UoW.Session)
.List<IUserLocation>();
我的映射文件:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="MyNamespace.IUserLocation,MyAssembly" abstract="true" table="IUserLocations">
<composite-id>
<key-property name="UserId" column="UserId" type="System.Guid"></key-property>
<key-many-to-one name="Location" column="LocationId" class="MyNamespace.ILocation,MyAssembly"></key-many-to-one>
</composite-id>
<union-subclass table="UserLocations" name="MyNamespace2.UserLocation,MyAssembly2">
<property name="IsAdmin" />
</union-subclass>
</class>
</hibernate-mapping>
【问题讨论】:
标签: nhibernate nhibernate-mapping interface