0

我想模拟以下关系。

[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 中的关系是什么(关系是一对一的.. 不是一对多的)

我离基地很远吗?

4

1 回答 1

0

事实证明,如果您在 OneToOne 关系的“子”端使用 Constrained = true,这会影响插入记录的顺序。我相信,它也可能会影响 AR 添加到数据库的外键关系。

OneToOne 对我来说是一个很棒的功能,可以将大数据模型逻辑分离到责任较少的表中。

于 2009-12-07T23:42:37.740 回答