次の関係をモデル化したいと思います。
[JoinedBase]
MasterForm{
Guid MasterFormId {get;set;}
/* some base properties like modifiedBy etc... */
}
[ActiveRecord]
TerminationForm{
[PrmaryKey(Foreign)]
Guid MasterFormId {get; set;}
/* Some more properties specific to terminations */
}
[ActiveRecord("TermStaffing")]
public class TermStaffing : StaffingBase, ITermStaffing
{
}
public abstract class StaffingBase : EntityBase<StaffingBase>, IStaffingBase
{
protected StaffingBase()
{
}
protected StaffingBase(string createdBy)
{
this.CreatedBy = createdBy;
}
[PrimaryKey(PrimaryKeyType.Foreign)]
public virtual Guid MasterFormId
{
get; set;
}
}
これはすべて、メインクラスの継承を形成します...基本フォームと、いくつかの特定のフォーム..TerminationForm、別のフォーム...など...
そして、各子フォームから他のいくつかのフォーム セクションをぶら下げるつもりでした。これらの子フォームを [OneToOne] としてモデル化しました
つまり、TerminationForm が上記の FormOne に類似している場合..その下に「Staffing」があります..これがリンクです..およびその相互リンクです (注...いくつかの Staffing プロパティを抽象ベースに引き上げました。退職スタッフと休暇スタッフ)
[OneToOne(MapType = typeof(TermStaffing), Cascade = CascadeEnum.All, PropertyRef = "MasterFormId", ForeignKey = "FK_TerminationFormsStaffing", Constrained = true)]
public virtual ITermStaffing Staffing
[OneToOne(MapType = typeof(TerminationForm), PropertyRef = "MasterFormId", ForeignKey = "FK_StaffingTerminationForms", Constrained = true)]
public virtual ITerminationForm TerminationForm
AR がスキーマを作成すると、主キーを制約する関係を介して、TerminationForm を MasterForm に適切に関連付けます...
ただし、 TerminationStaffing テーブルに MasterFormId が含まれていても、作成されたリレーションは表示されません。これについて心配する必要がありますか?後で追加できるかもしれませんが、驚きました。
TerminationStaffing で [BelongsTo] を使用することを考えましたが、TerminationForm でどのような関係になりますか (関係は 1 対 1 です。1 対多ではありません)。
私はベースから離れていますか?