Utilizzo di AutoPersistenceModel di NHibernate fluente ma con caricamento desideroso in un singolo oggetto

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

Domanda

Sto usando Fluent NHibernate per mappare automaticamente le mie entità.

Questo è il codice che sto usando per l'auto mapping:

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

Funziona bene. Ma ora ho bisogno di avere Eager Loading in un singolo oggetto del mio dominio. Trovato questa risposta . Ma quando aggiungo la riga .ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad()) al codice ed eseguo ottengo la seguente eccezione:

  • Errore durante il tentativo di compilare il documento di mappatura per IEagerLoading

Si noti che sto utilizzando un'interfaccia (IEagerLoading) per contrassegnare gli oggetti che desidero caricare con impazienza.

Qualcuno può aiutare a fare questo? Ricorda che voglio mantenere la funzionalità di mappatura automatica.

Grazie

È stato utile?

Soluzione

Il problema che stai colpendo è che ForTypesThatDeriveFrom<T> ha un nome un po 'fuorviante e che in realtà significa ForMappingsOf<T>, quindi sta cercando di trovare un ClassMap<IEagerLoading> che ovviamente non esiste.

Credo che dovresti essere in grado di gestirlo con un IClassConvention personalizzato. Questo è fuori dalla mia testa, ma dovrebbe funzionare:

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

  public void Apply(IClassMap target)
  {
    target.Not.LazyLoad();
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top