Personalizzato Fluent NHibernate non Maps Lavorare con automapping
Domanda
Sto avendo un problema con Fluent NHibernate AutoPersistenceModelGenerator. Non vuole far salire mappe personalizzate.
Utilizzando Sharp Architettura 2.0, Fluent NHibernate 1.2 e NHibernate 3.1.
Il mio attuale configurazione rilevante è la seguente:
public AutoPersistenceModel Generate()
{
// This mappings group works with the exception of custom maps!!
var mappings = AutoMap.AssemblyOf<SecurableEntity>(new AutomappingConfiguration());
mappings.Conventions.Setup(GetConventions());
mappings.IgnoreBase<Entity>();
mappings.IgnoreBase<SecurableEntity>();
mappings.IgnoreBase(typeof(EntityWithTypedId<>));
mappings.UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();
//mappings.UseOverridesFromAssemblyOf<UserMap>(); // Should call Override method of UserMap, but doesn't appear to...
mappings.Override<User>(new UserMap().Override()); // This hack fixes the issue with calling the Override method of UserMap.
mappings.UseOverridesFromAssemblyOf<UserMap>();
return mappings;
}
class UserMap : IAutoMappingOverride<User>
{
public void Override(AutoMapping<User> mapping)
{
//mapping => mapping.Table("Users");
mapping.Table("Users");
}
public Action<AutoMapping<User>> Override()
{
return map =>
{
map.Table("Users");
};
}
}
Ho provato a fare varie modifiche alla configurazione e versando sopra articoli di internet su Fluent NHibernate, senza alcun risultato. Ho una versione di lavoro utilizzando Sharp Arch 1.x, e le versioni precedenti di NHibernate e Fluent. Sto supponendo che ci sia stato un cambiamento nella sintassi che mi manca. Qualsiasi aiuto sarebbe molto apprezzato.
Grazie! John
Soluzione
Fluent NHibernate utilizzare Assembly.GetExportedTypes()
metodo per ottenere tutte le sostituzioni da data di assemblaggio. Come dicono la documentazione di questo metodo, si ottiene i pubblici tipi definiti in questa assemblea, che sono esterno visibile l'assemblea. La vostra modifica è implicitamente interno . Basta aggiungere public
prima class UserMap
e funzionerà.