Fluent NHibernateのAutoPersistenceModelを使用しますが、単一のオブジェクトに積極的にロードします

StackOverflow https://stackoverflow.com/questions/825474

質問

エンティティを自動マッピングするためにFluent NHibernateを使用しています。

これは自動マッピングに使用しているコードです:

new AutoPersistenceModel()
  .AddEntityAssembly(Assembly.GetAssembly(typeof(Entity)))
  .Where(type => type.Namespace.Contains("Domain") && type.BaseType != null && type.BaseType.Name.StartsWith("DomainEntity") && type.BaseType.IsGenericType == true)
  .WithSetup(s => s.IsBaseType = (type => type.Name.StartsWith("DomainEntity") && type.IsGenericType == true))
  .ConventionDiscovery.Add(
      ConventionBuilder.Id.Always(x => x.GeneratedBy.Increment())
);

これは問題なく機能します。しかし、今では、ドメインの1つのオブジェクトにEager Loadingが必要です。 この回答が見つかりました。しかし、コードに行.ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad())を追加して実行すると、次の例外が発生します。

  • IEagerLoadingのマッピングドキュメントの構築中にエラーが発生しました

インターフェイス(IEagerLoading)を使用して、積極的にロードするオブジェクトをマークしていることに注意してください。

誰でもこれを行う方法を手伝うことができますか?自動マッピング機能を維持したいことを忘れないでください。

ありがとう

役に立ちましたか?

解決

あなたが当たっている問題は、ForTypesThatDeriveFrom<T>が少し誤解を招くような名前であり、それが本当にForMappingsOf<T>を意味するため、明らかに存在しないClassMap<IEagerLoading>を見つけようとしていることです。

カスタムIClassConventionでこれを処理できるはずです。これは私の頭上ではありませんが、動作するはずです:

public class EagerLoadingConvention : IClassConvention
{
  public bool Accept(IClassMap target)
  {
    return GetType().GetInterfaces().Contains(typeof(IEagerLoading));
  }

  public void Apply(IClassMap target)
  {
    target.Not.LazyLoad();
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top