У меня есть интерфейс IUserLocation
и конкретный тип UserLocation
.
Когда я использую ICriteria, указав интерфейс IUserLocation
, я хочу, чтобы NHibernate создавал коллекцию типа concrete UserLocation
.
Я создал файл отображения HBM, используя таблицу для стратегии конкретного типа (показано ниже). Однако, когда я запрашиваю NHibernate, используя ICriteria, я получаю:
NHibernate не может создать экземпляр абстрактного класса или интерфейса MyNamespace.IUserLocation
Кто-нибудь может понять, почему это так? (исходный код для соответствующего бита NHibernate здесь (я думаю))
Мои критерии:
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>