На заметку!
Объекты с навигационными свойствами удобно рассматривать как связные списки. Если навигационные свойства являются двунаправленными, тогда объекты ведут себя подобно двусвязным спискам.Прежде чем погружаться в детали навигационных свойств и шаблонов отношений между сущностями, ознакомьтесь с табл. 22.4, где приведены термины, которые используются во всем трех шаблонах отношений.
Отсутствие свойств для внешних ключей
Если сущность с навигационным свойством типа ссылки не имеет свойства для значения внешнего ключа, тогда EF Core создаст необходимое свойство или свойства внутри сущности. Они известны как
<имя навигационного свойства><имя свойства главного ключа> или <имя главной сущности><имя свойства главного ключа>. Сказанное справедливо для всех видов отношений ("один ко многим", "один к одному", "многие ко многим"). Такой подход к построению сущностей с явным свойством или свойствами внешних ключей гораздо яснее, чем поручение их создания исполняющей среде EF Core.Отношения "один ко многим"
Чтобы создать отношение "один ко многим", сущностный класс со стороны "один" (главная сущность) добавляет свойство типа коллекции сущностных классов, находящихся на стороне "многие" (зависимые сущности). Зависимая сущность также должна иметь свойства для внешнего ключа обратно к главной сущности, иначе исполняющая среда EF Core создаст теневые свойства внешних ключей, как объяснялось ранее.
Например, в базе данных, созданной в главе 21, между таблицей Makes
Make) и таблицей Inventory (представленной сущностным классом Car) имеется отношение "один ко многим". Для упрощения примеров сущность Car будет отображаться на таблицу Cars. В следующем коде показаны двунаправленные навигационные свойства, представляющие это отношение:using System.Collections.Generic;
namespace AutoLot.Samples.Models
{
public class Make : BaseEntity
{
public string Name { get; set; }
public IEnumerable
}
}
using System.Collections.Generic;
namespace AutoLot.Samples.Models
{
public class Car : BaseEntity
{
public string Color { get; set; }
public string PetName { get; set; }
public int MakeId { get; set; }
public Make MakeNavigation { get; set; }
}
}
На заметку!
При создании шаблонов для существующей базы данных исполняющая среда EF Core именует навигационные свойства типа ссылок аналогично обычным свойствам (скажем,public Make {get; set;}). В итоге могут возникать проблемы с навигацией и IntelliSense, не говоря уже о затруднениях при работе с кодом. Для ясности предпочтительнее добавлять к именам навигационных свойств типа ссылок суффикс Navigation, как демонстрировалось выше.В примере Car/Make
Car является зависимой ("многие" в "один ко многим"), а сущность Make — главной ("один" в "один ко многим").Добавьте в класс ApplicationDbContext
DbSet:public DbSet
public DbSet
Затем создайте миграцию и обновите базу данных с использованием приведенных далее команд:
dotnet ef migrations add One2Many -o Migrations
-c AutoLot.Samples.ApplicationDbContext
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT