$"{FirstName} {LastName} ordered a {Color} {Make} named {PetName}";
public override string ToString => FullDetail;
}
}
Аннотация
данных
[KeyLess]
указывает, что класс является сущностью, работающей с данными, которые не имеют первичного ключа и могут быть оптимизированы как данные только для чтения (с точки зрения базы данных). Первые пять свойств соответствуют данным, поступающим из представления. Свойство
FullDetail
декорировано посредством аннотации данных
[NotMapped]
, которая информирует инфраструктуру EF Core о том, что это свойство не должно включаться в базу данных, и не может поступать из базы данных в результате операций запросов. Инфраструктура EF Core также игнорирует переопределенную версию метода
ToString
.
Добавление класса модели представления к ApplicationDbContext
Финальный шаг предусматривает регистрацию и конфигурирование
CustomerOrderViewModel
в
ApplicationDbContext
.
Добавьте к
ApplicationDbContext
оператор
using
для
AutoLot.Models.ViewModels
и затем свойство
DbSet<T>
:
public virtual DbSet<CustomerOrderViewModel>?
CustomerOrderViewModels { get; set; }
Помимо добавления свойства
DbSet<T>
необходимо с помощью Fluent API сопоставить модель представления с представлением SQL Server. Метод
HasNoKey
из Fluent API и аннотация данных
[KeyLess]
делают то же самое, но метод Fluent API замещает аннотацию данных. Ради ясности рекомендуется оставлять аннотацию данных на месте. Добавьте в метод
) ядро этого паттерна является посредником между уровнями предметной области и сопоставления с данными. Наличие обобщенного хранилища, которое содержит общий код доступа к данным, помогает устранить дублирование кода. Наличие специфических хранилищ и интерфейсов, производных от базового хранилища, также хорошо подходит для работы с инфраструктурой внедрения зависимостей в ASP.NET Core.
Каждая сущность предметной области внутри уровня доступа к данным
AutoLot
будет иметь строго типизированное хранилище для инкапсуляции всей работы по доступу к данным. Первым делом создайте в проекте
AutoLot.Dal
новый каталог по имени
Repos
, предназначенный для хранения всех классов.
На
заметку! Не воспринимайте следующий раздел как буквальную интерпретацию паттерна проектирования "Хранилище". Если вас интересует исходный паттерн, который послужил мотивом для создания приведенной здесь версии, тогда почитайте о нем по ссылке