Fluent NHibernateのAutoPersistenceModelを使用しますが、単一のオブジェクトに積極的にロードします
-
05-07-2019 - |
質問
エンティティを自動マッピングするために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();
}
}
所属していません StackOverflow