0

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

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

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つのオブジェクトにEagerLoadingを含める必要があります。この答えを見つけました。しかし.ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad())、コードに行を追加して実行すると、次の例外が発生します。

  • IEagerLoadingのマッピングドキュメントを作成しようとしたときにエラーが発生しました

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

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

ありがとう

4

1 に答える 1

3

あなたが直面している問題は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();
  }
}
于 2009-05-05T17:17:40.863 に答える