Utilisation du modèle AutoPersistenceModel de Fluent NHibernate mais avec un chargement rapide dans un seul objet

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

Question

J'utilise Fluent NHibernate afin de mapper automatiquement mes entités.

Voici le code que j'utilise pour le mappage automatique:

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

Cela fonctionne très bien. Mais maintenant, je dois avoir Eager Loading dans un seul objet de mon domaine. cette réponse . Mais lorsque j'ajoute la ligne .ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad()) au code et que je l'exécute, j'obtiens l'exception suivante:

  • Erreur lors de la tentative de création du document de mappage pour IEagerLoading

Notez que j'utilise une interface (IEagerLoading) pour marquer les objets que je veux charger avec impatience.

Quelqu'un peut-il aider à faire cela? N'oubliez pas que je souhaite conserver la fonctionnalité de mappage automatique.

Merci

Était-ce utile?

La solution

Le problème que vous rencontrez est que ForTypesThatDeriveFrom<T> est un peu trompeur, et que cela signifie vraiment ForMappingsOf<T>, donc il essaie de trouver un ClassMap<IEagerLoading> qui n'existe évidemment pas.

Je pense que vous devriez pouvoir gérer cela avec une coutume IClassConvention. C’est hors de propos, mais ça devrait marcher:

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

  public void Apply(IClassMap target)
  {
    target.Not.LazyLoad();
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top