我有一类结构像下面NHibernate的代理创建
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对象。那么我可以(如果我愿意的话)将它们转换成具体的类型,并对它们做一些特定的事情。
但是,有时候我得到了一个不能转换为具体类型的“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从不延迟加载任何它automaps,不是理想的,如果我在未来需要的功能,但它似乎现在工作。
你的映射是什么样的? – snicker 2010-03-16 16:22:08