2009-12-05 23 views
0

我想模拟以下关系。Castle ActiveRecord OneToOne和JoinedBase/Key一起创建没有SQL关系

[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通过这限制了它们的主键关系型模...

然而,即使TerminationStaffing表包括MasterFormId我不”看看创建的关系。我应该担心这个吗?也许我可以将它添加后,但我很惊讶。

我想过使用[属于关联]上TerminationStaffing但是随后在TerminationForm(的关系是一对一的..不一对多)

我是大错特错什么关系呢?

回答

0

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

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