mam następujący scenariuszjak uzyskać tabelę na klasę betonu, gdy klasa podstawowa jest abstrakcyjna w płynnym nhibernate?
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;}
}
dla mapowania Użyłem następujący fragment kodu: -
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();
Domyślnie płynną zignoruje abstrakcyjną klasę bazową, która jest klasy bazowej. Ale jak w klasie ProcessStep jest ContentElements własności, która zwraca IList, otrzymuję wyjątek: - NHibernate.MappingException: Stowarzyszenie referencje unmapped klas: klasy bazowej
Gdybym obejmują klasę bazową używając IncludeBase (typeof (BaseClass)) działa poprawnie, ale tworzy tabelę dla klas BaseClass i Derived, a rekordy są powiązane relacją FK-PK (tabela na podklasę). Co chcę osiągnąć, to tabela na klasę betonu. to jest każda klasa pochodna będzie miała swoją własną tabelę, gdzie będą wszystkie właściwości pochodnych klas + właściwości w klasie bazowej. Każdy pomysł, jak to osiągnąć?
używam Automap tak więc nie mam przepisu do mapowania klas osobno. – Niraj
można mieszać automapie z niestandardowymi mapowaniami, dzięki czemu można udostępniać mapowanie tylko dla określonych klas, pozostałe klasy można odwzorować za pomocą automatyzacji. Coś takiego: Fluently.Configure (konfiguracja) .Mappings (cfg => {cfg.AutoMappings.Add (....); cfg..FluentMappings.AddFromAssembly (Twój niestandardowy zestaw mapowania);}) – Rajeesh