2009-12-05 11 views
0

Je souhaite modéliser la relation suivante.Castle ActiveRecord OneToOne et JoinedBase/Key ensemble, aucune relation SQL n'a été créée

[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; 
     } 
} 

Cette toute forme principale d'héritage de classe ... sous forme de base et certaines formes spécifiques ..TerminationForm, une autre forme ... etc ...

Et puis j'allais accrocher quelques-uns d'autres sections de formulaire sur chaque formulaire enfant. J'ai modélisé ces formes enfant en tant que [OneToOne]

I.e. si TerminationForm est analogue à FormOne ci-dessus .. J'ai "Staffing" ci-dessous .. c'est le lien .. et son lien réciproque (Note ... J'ai également retiré quelques propriétés Staffing dans une base abstraite parce que j'ai TerminationStaffing et 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 

Lorsque AR crée le schéma .. il se rapporte bien à TerminationForm Masterform par la relation qui limite leur clé primaire ...

Cependant, même si la table TerminationStaffing comprend un MasterFormId Je ne t voir la relation créée. Devrais-je m'inquiéter à ce sujet? Peut-être que je peux juste l'ajouter après mais j'ai été surpris.

Je pensais à l'aide de [Appartient] sur TerminationStaffing mais quelle relation va dans TerminationForm (la relation est un à un .. pas un à plusieurs)

Suis-je la base loin?

Répondre

0

Il s'avère que si vous utilisez Constrained = true du côté "enfant" d'une relation OneToOne, cela affecte l'ordre dans lequel les enregistrements sont insérés. Je crois également que cela peut avoir un impact sur les relations de clé étrangère qu'AR ajoute à votre base de données.

OneToOne a été une grande fonctionnalité pour moi de faire la séparation logique d'un grand datamodel dans des tables qui ont moins de responsabilités.