私は次のシナリオを持っています
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;}
}
マッピングには、次のコード スニペットを使用しました:-
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();
デフォルトでは、流暢は BaseClass である抽象基本クラスを無視します。しかし、クラスProcessStepにはIListを返すプロパティ ContentElements があるため、例外が発生します:- NHibernate.MappingException : 関連付けがマップされていないクラスを参照しています: BaseClass
IncludeBase(typeof(BaseClass)) を使用して基本クラスを含めると、正常に動作しますが、BaseClass および Derived クラスのテーブルが作成され、レコードは FK-PK 関係 (サブクラスごとのテーブル) にリンクされます。私が達成したいのは、具体的なクラスごとのテーブルです。つまり、各派生クラスには独自のテーブルがあり、派生クラスのすべてのプロパティ + 基本クラスのプロパティがあります。それを達成する方法はありますか?