Usando AutoPersistenceModel de Fluent NHibernate, mas com carga antecipada em um único objeto

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

Pergunta

Eu estou usando Fluent NHibernate, a fim de auto mapear meus entidades.

Este é o código que estou usando para o mapeamento automático:

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

Isso funciona muito bem. Mas agora eu preciso ter Eager Loading em um único objeto do meu domínio. Encontrado esta resposta . Mas quando eu adiciono o .ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad()) linha para o código e executá-lo eu recebo a seguinte exceção:

  • Erro ao tentar construir o documento de mapeamento para IEagerLoading

Observe que eu estou usando uma interface (IEagerLoading) para marcar os objetos que eu quero carga ansioso.

alguém pode ajudar como fazer isso? Lembre-se que eu quero manter a funcionalidade de mapeamento automático.

Graças

Foi útil?

Solução

O problema que você está batendo é que ForTypesThatDeriveFrom<T> é um pouco enganosamente chamado, e que realmente significa ForMappingsOf<T>, por isso está tentando encontrar um ClassMap<IEagerLoading> que obviamente não existe.

Eu acredito que você deve ser capaz de lidar com isso com um IClassConvention personalizado. Esta é em cima da minha cabeça, mas deve funcionar:

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

  public void Apply(IClassMap target)
  {
    target.Not.LazyLoad();
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top