У меня есть структура классов, подобная следующей
class Container
{
public virtual int Id { get; set; }
public IList<Base> Bases { get; set; }
}
class Base
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
class EnemyBase : Base
{
public virtual int EstimatedSize { get; set; }
}
class FriendlyBase : Base
{
public virtual int ActualSize { get; set; }
}
Теперь, когда я спрашиваю сессию о конкретном контейнере, он обычно дает мне конкретные объекты EnemyBase и FriendlyBase в коллекции Bases. Затем я могу (если захочу) привести их к конкретным типам и сделать с ними что-то конкретное.
Однако иногда я получаю прокси класса "Base", который не может быть преобразован в конкретные типы. Один и тот же метод используется оба раза, за исключением того, что в случае, когда я получаю прокси-серверы, я добавил несколько связанных сущностей в сессию (подумайте, что дружеская база имеет коллекцию людей или что-то в этом роде).
Могу ли я как-нибудь помешать ему создать прокси-сервер и почему он решил сделать это в некоторых сценариях?
UPDATE
Отображения генерируются с помощью функции автоматического выбора в fluentnhibernate, но при экспорте выглядят примерно так
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Base" table="`Base`">
<id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="MyIdGenerator" />
</id>
<property name="Name" type="String">
<column name="Name" />
</property>
<joined-subclass name="EnemyBase">
<key>
<column name="Id" />
</key>
<property name="EstimatedSize" type="Int">
<column name="EstimatedSize" />
</property>
</joined-subclass>
<joined-subclass name="FriendlyBase">
<key>
<column name="Id" />
</key>
<property name="ActualSize" type="Int">
<column name="ActualSize" />
</property>
</joined-subclass>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Container" table="`Container`">
<id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="MyIdGenerator" />
</id>
<bag cascade="all-delete-orphan" inverse="true" lazy="false" name="Bases" mutable="true">
<key>
<column name="ContainerId" />
</key>
<one-to-many class="Base" />
</bag>
</class>
</hibernate-mapping>
UPDATE
Я сейчас сказал NH, чтобы никогда не лениво загружать все, что он автоматизирует, не идеально, если мне понадобится эта функция в будущем, но, похоже, она работает сейчас.