Я создаю приложение MVC и хочу сгенерировать базу данных с использованием подхода Code First. Я сделал это с помощью простых таблиц, но теперь, когда я вводил отношения с внешним ключом, вещи меня путают.Назначение внешних ключей с использованием кода
У меня есть три класса, каждый из которых будет иметь свою собственную таблицу в базе данных:
public class Device
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalDeviceID { get; set; }
public int DeviceID { get; set; }
public string DeviceName { get; set; }
public virtual EquipmentDevice EquipmentDevice { get; set; }
}
public class Equipment
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalEquipmentID { get; set; }
public int EquipmentID { get; set; }
public string EquipmentName { get; set; }
public virtual EquipmentDevice EquipmentDevice { get; set; }
}
public class EquipmentDevice
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalEquipmentDeviceID { get; set; }
public virtual ICollection<Equipment> EquipmentID { get; set; }
public virtual ICollection<Device> DeviceID { get; set; }
}
Отношение в том, что оборудование может иметь множество устройств и устройства могут принадлежать многим оборудованиям (а многим для многих, если я не ошибаюсь). Чтобы организовать оборудование, с которыми связаны устройства, я использую таблицу EquipmentDevice, которая будет просто связывать их идентификаторы вместе с внутренним идентификатором для этой таблицы.
Основываясь на других примерах, которые я нашел, я считал, что это способ кодирования такой ситуации, когда многие стороны отношений будут иметь объект ICollection <> с одной стороны, а Single сторона отношения будет иметь виртуальный объект со стороны Many (оба класса имеют ICollection <> другого для N: N или оба имеют виртуальный для 1: 1)
Однако, когда я создаю базы данных, мои таблицы выглядеть следующим образом:
EquipmentDevice Таблица
Могу ли я просто в обратном пути, в котором я настройка внешних ключей для моих таблиц, или есть другая проблема Я вообще отсутствую для такого рода ситуаций? Я не мог найти исключительно полезный источник информации по этому вопросу. Я также присоединяю то, как будет выглядеть диаграмма этих таблиц, просто чтобы помочь быть более ясными.
Ах очень приятно - я не знал, что EF создаст реляционные таблицы для вас! Хотя, возможно, вы могли бы подробнее остановиться на «общедоступном оборудовании() ... HashSet» и «public Device() ... HashSet» часть класса? Я не думаю, что натолкнулся на то, что в моих примерах пока –
EF использует объекты HashSet для представления свойств коллекции по обе стороны от отношения «многие ко многим». Вы должны «обновить» их в конструкторе, чтобы их можно было заполнить из базы данных или в памяти, иначе вы получите исключение NullReferenceException при загрузке БД или когда вы попытаетесь работать с одной из коллекций для операции CRUD. –
Итак, скажем, что у меня есть Table_A и Table_B. Они имеют отношение 1: N, соответственно. Я хочу использовать ID из таблицы_A как FK в таблице_B, но не нужно никаких столбцов из таблицы_B, чтобы присутствовать в таблице_A. Поскольку я не создаю новую таблицу из этих отношений, будет ли Table_A иметь только свойство «public virtual Table_B objectname», а у Table_B есть свойство «public virtual ICollection objectname», и что будет иметь внешний ключ от A до B? –