Создание основной таблицы с двумя дочерними таблицами, связывающими один к нулю или один с EF 4.1
Используя 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 ответ
Не могли бы вы дать дополнительную информацию о том, почему вы хотите это сделать? Если вы разделяете первичный ключ на три таблицы, вы делите данные. Какой сценарий развития вы пытаетесь решить. Похоже, вы хотите отобразить наследование объекта, верно?
Если у вас действительно есть только пара описаний, то это действительно одна таблица.
РЕДАКТИРОВАТЬ:
Здорово. Поскольку бизнес-контекст этого запроса немного расплывчатый, я все еще не могу понять, извините. Если у вас есть TableMaster, а затем несколько дочерних таблиц, то это звучит как дерево наследования. Таким образом, с EF вы можете выбрать множество различных стратегий для моделирования этого (TPH, TPT и т. Д.). Для этого я бы посоветовал взглянуть на TPT, потому что это может позволить вам получить детализацию того, как вы хотите очистить данные. Кроме того, вы получаете преимущество в том, что таблицы будут создаваться по умолчанию, в основном так, как вы указали. Проверьте это для справки.