@"SELECT c.FirstName, c.LastName, i.Color, i.PetName, m.Name AS Make
FROM dbo.Orders o
INNER JOIN dbo.Customers c ON o.CustomerId = c.Id
INNER JOIN dbo.Inventory i ON o.CarId = i.Id
INNER JOIN dbo.Makes m ON m.Id = i.MakeId");
}
Гибкое сопоставление с запросом или таблицей
В версии EF Core 5 появилась возможность сопоставления одного и того же класса с более чем одним объектом базы данных. Такими объектами могут быть таблицы, представления или функции. Например, класс CarViewModel
Car и таблицей Inventory. Затем EF Core будет запрашивать из представления и отправлять обновления таблице:modelBuilder.Entity
.ToTable("Inventory")
.ToView("InventoryWithMakesView");
Экземпляр ChangeTracker
Экземпляр ChangeTracker
DbSet внутри экземпляра DbContext. В табл. 22.3 описаны возможные значения для состояния объекта.Для проверки состояния объекта используйте следующий код:
EntityState state = context.Entry(entity).State;
Вы также можете программно изменять состояние объекта с применением того же самого механизма. Чтобы изменить состояние на Deleted
context.Entry(entity).State = EntityState.Deleted;
События ChangeTracker
Экземпляр ChangeTracker
StateChanged и Tracked. Событие StateChanged инициируется в случае изменения состояния сущности. Оно не генерируется при отслеживании сущности в первый раз. Событие Tracked инициируется, когда сущность начинает отслеживаться, либо за счет добавления экземпляра DbSet в коде, либо при возвращении из запроса.Сброс состояния DbContext
В версии EF Core 5 появилась возможность сброса состояния DbContext
ChangeTracker.Clear отсоединяет все сущности от свойств DbSet, устанавливая их состояние в Detached.Сущности
Строго типизированные классы, которые сопоставляются с таблицами базы данных, официально именуются
Подобная слабая связанность между базой данных и вашими сущностями означает возможность придания сущностям формы, соответствующей предметной области, независимо от проектного решения и структуры базы данных. Например, возьмем простую таблицу Inventory
AutoLot и сущностный класс Car из предыдущей главы. Имена отличаются, но сущность Car сопоставляется с таблицей Inventory. Исполняющая среда EF Core исследует конфигурацию сущностей в модели, чтобы отобразить клиентское представление таблицы Inventory (класс Car в примере) на корректные столбцы таблицы Inventory.В последующих разделах будет показано, каким образом соглашения EF Core, аннотации данных и код (использующий Fluent API) сопоставляют сущности, свойства и отношения между сущностями в модели с таблицами, столбцами и отношениями внешних ключей в базе данных.
Сопоставление свойств со столбцами
При работе с реляционным хранилищем данных по соглашениям EF Core все открытые свойства, допускающие чтение и запись, сопоставляются со столбцами таблицы, на которую отображается сущность. Если свойство является автоматическим, то EF Core читает и записывает через методы получения и установки. Если свойство имеет поддерживающее поле, тогда EF Core будет читать и записывать не в открытое свойство, а в поддерживающее поле, хотя оно и закрыто. Несмотря на то что EF Core может читать и записывать в закрытые поля, все же должно быть предусмотрено открытое свойство, предназначенное для чтения и записи, которое инкапсулирует поддерживающее поле.
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT