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

이것은 잘 작동합니다.하지만 이제 내 도메인의 단일 개체에 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