Ho il seguente scenariocome raggiungere la tabella per classe concreta quando la classe base è astratta in fluente niberniato?
public abstract class BaseClass
{
public virtual int Id {get; set};
public virtual string Name {get; set;}
}
public class FirstSubClass : BaseClass
{
//properties and behaviour here
}
public class SecondSubClass : BaseClass
{
//properties of SecondSubclass Here
}
public class ProcessStep
{
public virtual IList<BaseClass> ContentElements {get; set;}
}
per la mappatura ho utilizzato seguente frammento di codice: -
this._sessionFactory =
Fluently.Configure().Database(SQLiteConfiguration.Standard
.ConnectionString(@"Data Source=SqliteTestSqlDataAccess.s3db; Version=3; New=True; Pooling=True; Max Pool Size=1;"))
.Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assemblyWithDomainClasses).Conventions.Add(DefaultCascade.All())))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
Per impostazione predefinita fluente ignorerà la classe base astratta che è BaseClass. Ma, come nella classe ProcessStep c'è contentelements proprietà che restituisce IList, io sono sempre un'eccezione: - NHibernate.MappingException: Associazione dei riferimenti alle classi non mappata: BaseClass
Se includo la classe di base utilizzando l'IncludeBase (typeof (BaseClass)) quindi funziona correttamente ma crea una tabella per classi BaseClass e Derivate e i record sono collegati con la relazione FK-PK (tabella per sottoclasse). Quello che voglio ottenere è tabella per classe di calcestruzzo. cioè ogni classe derivata avrà la propria tabella dove saranno presenti tutte le proprietà delle proprietà derivate di classe + nella classe base. Qualche idea su come ottenerlo?
sto usando Automapping così, non ho la possibilità di mappare le classi separatamente. – Niraj
puoi mescolare la mappatura automatica con mappature personalizzate, in modo che tu possa fornire il mapping solo per classi specifiche, il resto delle classi può essere mappato usando la mappatura automatica. Fluently.Configure (configurazione) .Mappings (cfg => {cfg.AutoMappings.Add (....); cfg..FluentMappings.AddFromAssembly (l'assieme di mappatura personalizzato);}) – Rajeesh