Создание основной таблицы с двумя дочерними таблицами, связывающими один к нулю или один с EF 4.1 - PullRequest
0 голосов
/ 02 февраля 2012

Используя MVC EF4.1, я пытаюсь связать таблицу (TableMaster) с TableChildOne (отношение один к нулю или один), а также с TableChildTwo (также один к нулю или один). TableChildOne и TableChildTwo не связаны напрямую.

TablechildOne и TableChildTwo должны совместно использовать первичный ключ TableMaster (я читал, что это невозможно, какие-либо обходные пути?)

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

изображение: http://www.davidsmit.za.net/img/untitled.png

Мой код ниже компилируется, но при попытке добавить контроллер я получаю сообщение об ошибке:

"Элемент с тем же ключом уже добавлен"

  public class TableMaster
{
    public int TableMasterID { get; set; }

    public DateTime ReportDate { get; set; }

    public virtual TableChildOne TableChildOne { get; set; }
    public virtual TableChildTwo TableChildTwo { get; set; }
}

public class TableChildOne
{
    [Key]
    public int TableMasterID { get; set; }

    public String Description_1 { get; set; }

    public virtual TableMaster TableMaster { get; set; }
}

  public class TableChildTwo
  {
     [Key]
      public int TableMasterID { get; set; }

     public String Description_2 { get; set; }

     public virtual TableMaster TableMaster { get; set; }
}

public class Context : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TableMaster>()
            .HasOptional(p => p.TableChildOne).WithRequired(p => p.TableMaster);

        modelBuilder.Entity<TableMaster>()
            .HasOptional(p => p.TableChildTwo).WithRequired(p => p.TableMaster);

}

Когда я полностью удаляю вторую таблицу, она отлично работает.

Я использовал приведенную ниже ссылку в качестве примера (таблицы OfficeAssignment и Student), которая показывает, как связать таблицу «один к нулю или один». Но у меня проблемы с добавлением другой таблицы с такой же связью: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application

Любая помощь будет оценена.

Спасибо appelmeester

1 Ответ

0 голосов
/ 02 февраля 2012

Не могли бы вы дать дополнительную информацию о том, почему вы хотите это сделать? Если вы разделяете первичный ключ на три таблицы, вы делите данные. Какой сценарий развития вы пытаетесь решить. Похоже, вы хотите отобразить наследование объекта, верно?

Если у вас действительно есть только пара описаний, то это действительно одна таблица.

EDIT:

Cool. Поскольку бизнес-контекст этого запроса немного расплывчатый, я все еще не могу понять, извините. Если у вас есть TableMaster, а затем несколько дочерних таблиц, то это звучит как дерево наследования. Таким образом, с EF вы можете выбрать множество различных стратегий для моделирования этого (TPH, TPT и т. Д.). Для этого я бы посоветовал изучить TPT, потому что это может позволить вам получить детализацию того, как вы хотите очистить данные. Кроме того, вы получаете преимущество в том, что таблицы будут создаваться по умолчанию, в основном так, как вы указали. Проверьте это для справки.

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