Замок ActiveRecord OneToOne и JoinedBase / Key - все вместе, отношений SQL не создано - PullRequest
0 голосов
/ 05 декабря 2009

Я хотел бы смоделировать следующие отношения.

[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 в абстрактную базу, потому что у меня есть TerminationStaffing и оставить персонал)

[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, я не вижу созданного отношения. Должен ли я беспокоиться об этом? Может быть, я могу просто добавить это после, но я был удивлен.

Я думал об использовании [BelongsTo] для TerminationStaffing, но затем какое отношение имеет отношение к TerminationForm (отношение один к одному .. не один ко многим)

Я далеко от базы?

1 Ответ

0 голосов
/ 08 декабря 2009

Оказывается, что если вы используете Constrained = true на «дочерней» стороне отношения OneToOne, это влияет на порядок, в котором вставляются записи. Это также, я считаю, может повлиять на отношения внешнего ключа, которые AR добавляет в вашу базу данных.

OneToOne - это отличная возможность для меня сделать логическое разделение большой модели данных на таблицы, которые несут меньшую ответственность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...