1

中程度の信頼で実行されているアプリケーションで継承のマッピングに問題があります。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>

すべてを手動で行う必要がありますか? ここで継承を使用したいと思います。

4

3 に答える 3

3

元の問題を解決することはできませんでしたが、AlexCuse からの回答により、回避策が見つかりました。

モデルを変更すると、次を使用してマッピングをエクスポートします

.Mappings(
    m => m.FluentMappings.AddFromAssemblyOf<SessionManager>()
    .ExportTo("mappings")
)

マッピングをリソースとして埋め込んだ後、次を使用してマッピングします

.Mappings(
    m => m.HbmMappings.AddFromAssemblyOf<SessionManager>()
)
于 2011-05-26T06:11:05.253 に答える
0

SubclassMap <>を使用しているため、問題が発生します

Fluent NHibernate(10月の最新コードでも)は、内部でBinaryFormatterを使用してマッピング式のクローンを作成するサブクラスマッピング操作中にDeepClone(..)拡張メソッドを使用しますが、読み取り/書き込みを試みるため、MediumTrustでは実行できません。プライベートメンバー。

Fluent NHibernateを修正していません(フォークで修正中ですが)が、最近、MediumTrustでテストコードを単体テストする方法について投稿しました。

パート3には、任意のNUnitテストフィクスチャに使用できる基本クラスを備えたダウンロード可能なアセンブリがあり、他のパーツへのリンクが含まれています:http: //boxbinary.com/2011/10/how-to-run-a-unit- test-in-medium-trust-with-nunitpart-three-umbraco-framework-testing /

于 2011-10-21T17:08:47.707 に答える
0

うーん、ベースがカバーされているようです。あなたがこれを経験したと仮定しますが、念ために。

流暢な NHibernate が継承を処理する方法で問題が発生したようです。(両方の) どのバージョンを実行していますか? 問題が流暢または nhibernate の構成に固有のものであるかどうかを判断するには、セッション ファクトリをセットアップするときに次のようなものを実行してみてください (完全な信頼で)。

.Mappings(m =>
{
  m.FluentMappings
    .AddFromAssemblyOf<YourEntity>()
    .ExportTo(@"C:\your\export\path");

  m.AutoMappings
    .Add(/* ... */)
    .ExportTo(@"C:\your\export\path");
})

( http://wiki.fluentnhibernate.org/Fluent_configurationから)

これにより、標準の .hbm.xml マッピング ファイルがエクスポートされ、アプリケーションがnhibernateだけで適切に実行されるかどうかを確認するために使用できます。

于 2011-04-08T19:57:10.963 に答える