2009-05-05 3 views
0

私はエンティティを自動マッピングするためにFluent NHibernateを使用しています。Fluent NHibernateのAutoPersistenceModelを使用するが、単一のオブジェクトに熱心にロードする

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

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()) 
); 

これはうまく動作します。しかし、今では私のドメインの一つのオブジェクトにEager Loadingを持たせる必要があります。 Found this answer。しかし、私は、私は次の例外を取得するコードに行.ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad())を追加し、それを実行すると:

  • エラー私が使用している

IEagerLoadingのためのマッピング・ドキュメントを構築しようとしているのお知らせながら、インターフェイス( IEagerLoading)を使用して、欲しいオブジェクトをマークします。

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

おかげ

答えて

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(); 
    } 
}