中程度の信頼で実行されているアプリケーションで継承のマッピングに問題があります。web.config から中程度の信頼制限を削除すると、魅力的に機能します。サブクラスのマッピングをコメントアウトすると、すべてうまくいきます。
私のアプリケーションが中程度の信頼で起動すると、Fluent の構成の構築中に、System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(...) メソッドに実行権限がないことを読み取ることができる例外をキャッチします。
私が見つけることができるすべての情報は、遅延プロキシを事前に生成し、遅延読み込みをオフにし、リフレクション オプティマイザーを無効にすることを示唆しています。サブクラスをマップしなくてもコードは機能します。
ここに私のマッピングがあります:
public PageMap()
{
Id(x => x.PageID);
Map(x => x.DateCreated);
Map(x => x.DateLastAccessed);
Map(x => x.Hits);
Map(x => x.PrivateSuffix);
Map(x => x.PublicSuffix);
HasMany(x => x.Components).Not.LazyLoad();
Not.LazyLoad();
}
}
public class ComponentMap: ClassMap<Component>
{
public ComponentMap()
{
Id(x => x.ComponentID);
Map(x => x.Position);
References(x => x.Page);
DiscriminateSubClassesOnColumn("ComponentType");
Not.LazyLoad();
}
}
public class HeadingComponentMap : SubclassMap<HeadingComponent>
{
public HeadingComponentMap()
{
Map(x => x.Text);
Not.LazyLoad();
}
}
および web.config の関連部分
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<bytecode-provider type="null"/>
<reflection-optimizer use="false" />
<session-factory name="">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|entities.mdf;User Instance=true</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name='current_session_context_class'>web</property>
</session-factory>
すべてを手動で行う必要がありますか? ここで継承を使用したいと思います。