我想模拟以下关系。
[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 属性提取到一个抽象基础中,因为我有TerminationStaffing 和 LeaveStaffing)
[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 中的关系是什么(关系是一对一的.. 不是一对多的)
我离基地很远吗?