Domanda

In questo momento, sto cambiando il mio progetto dal classico stile fluente di proibizione della definizione manuale di un ClassMap per ogni entità di dominio, per fare in modo che l'auto-mapper generi automaticamente le mappature per me. Ma mi piacerebbe continuare a usare le classi che ho già mappato nello stile classico, fino a quando non posso modificare le automapping in modo che corrispondano alle vecchie mappature classiche.

L'unico problema è che il nhibernate fluente si arresta in modo anomalo quando il mappatore automatico colpisce una classe che è già stata mappata nel classico stile di negligenza fluente.

Ecco il mio AutoPersistenceModel codice di configurazione:

_autoPersistenceModel = AutoMap.AssemblyOf<DomainEntity>();
_autoPersistenceModel.AddMappingsFromAssembly(typeof (PlayerPersistenceMap).Assembly);

_autoPersistenceModel.Alterations(x =>
                    x.Add<AutoMappingAlteration>())
                .Setup(s =>
                {
                    s.FindIdentity = type => type.Name == "ID";

                    s.IsBaseType = type => (type == typeof(DomainEntity));
                })
                .Conventions
                    .AddFromAssemblyOf<IdentityColumnConvention>()
                    .UseOverridesFromAssemblyOf<PlayerMappingOverride>();

Qualcuno può aiutarmi qui?

Ulteriori informazioni:

Ho anche provato la tecnica menzionata nella wiki fluente-proibita qui . Purtroppo sto ancora ricevendo l'errore: Mappatura duplicata classe / entità .

È stato utile?

Soluzione

Il esempio di mappature fluide miste e mappature automatiche nel wiki dovrebbe funzionare, se non funziona allora c'è un bug.

Come soluzione alternativa, escludi i tipi che sono stati mappati manualmente dalle automappings. Lo faresti usando il metodo Where , come mostrato negli esempi wiki, qualcosa del genere:

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => type != typeof(OneOfYourManuallyMappedClasses));

Se hai molte mappature fluide, puoi creare una raccolta per mantenere pulita la configurazione dell'automapping:

var mappedTypes = new[] { typeof(One), typeof(Two) };

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => !mappedTypes.Contains(type));

Ancora una volta, questo non dovrebbe essere necessario, ma se sei sicuro che non funziona con l'esempio wiki, suggerirei di sollevare un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top