Я работаю над веб-приложением ASP.NET, использующим NHibernate, и заметил кое-что забавное.
Итак, у меня есть объект Document, который я бы превратил в абстрактный класс, и две конкретные реализации Document1 и Document2.Я попытался написать сопоставления для них, применяя стратегию таблицы на подкласс, как описано в документации ( текст ссылки ):
<class name="Document" abstract="true">
<id name="Id">
<generator class="identity"/>
</id>
...
<class>
<joined-subclass
name="Document1"
extends="Document" >
<key column="ParentId"/>
...
</joined-subclass>
<joined-subclass
name="Document2"
extends="Document" >
<key column="ParentId"/>
...
</joined-subclass>
Теперь вот так я получаю объекты изсеанс в моем приложении:
public TEntity GetById<TEntity>(object id) {
return Session.Get<TEntity>(id);
}
Теперь моя проблема в том, что когда я делаю:
GetById<Document>(1)
например, я не получаю объект Document, я получаю объект типа Document1или Document2 в зависимости от типа объекта.
Я попытался использовать таблицу на подкласс со стратегией дискриминаторов, как упомянуто в документации (ссылка выше), и я установил join = select и lazy = false для абстрактного объекта, чтобы он возвращал объект типаДокумент, но ничего не сработало.
Код работает, но он не выглядит правильным.У меня есть соединение слева, где я не смог бы его использовать.Разве нет способа просто получить абстрактный объект или nhibernate фактически создает экземпляры возвращаемых объектов, которые сделали бы это невозможным?Возможно ли это?
У меня такое ощущение, что я получаю больше информации, чем мне нужно.