我有一類結構像下面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