Язык программирования C#9 и платформа .NET5
namespace AutoLot.Dal.Repos{<b>public</b> class MakeRepo : <b>BaseRepo<Make>, IMakeRepo</b>{public MakeRepo(ApplicationDbContext context): base(context){}internal MakeRepo(DbContextOptions<ApplicationDbContext> options): base(options){}}}Переопределите методы
, чтобы они сортировали значенияGetAll()по названиям:Makepublic override IEnumerable<Make> GetAll()=> Table.OrderBy(m => m.Name);public override IEnumerable<Make> GetAllIgnoreQueryFilters()=> Table.IgnoreQueryFilters().OrderBy(m => m.Name);Хранилище данных о заказах
Откройте файл класса
и поместите в его начало следующие операторыOrderRepo.cs:usingusing AutoLot.Dal.EfStructures;using AutoLot.Dal.Models.Entities;using AutoLot.Dal.Repos.Base;using AutoLot.Dal.Repos.Interfaces;using Microsoft.EntityFrameworkCore;Измените класс на
, унаследуйте его отpublicи реализуйтеBaseRepo<Order>:IOrderReponamespace AutoLot.Dal.Repos{<b>public</b> class OrderRepo : <b>BaseRepo<Order>, IOrderRepo</b>{public OrderRepo(ApplicationDbContext context): base(context){}internal OrderRepo(DbContextOptions<ApplicationDbContext> options): base(options){}}}Реализуйте метод
, который возвращает экземпляр реализацииGetOrderViewModel()из представления базы данных:IQueryable<CustomOrderViewModel>public IQueryable<CustomerOrderViewModel> GetOrdersViewModel(){return Context.CustomerOrderViewModels!.AsQueryable();}На этом реализация всех классов хранилищ завершена. В следующем разделе будет написан код для удаления, создания и начального заполнения базы данных.
Программная работа с базой данных и миграциями
Свойство
классаDatabaseпредлагает программные методы для удаления и создания базы данных, а также для запуска всех миграций. В табл. 23.1 описаны методы, соответствующие указанным операциям.DbContextКак упоминалось в табл. 23.1, метод
создает базу данных, если она не существует, после чего создает таблицы, столбцы и индексы на основе сущностной модели. Никаких миграций он не применяет.EnsureCreated()Если вы используете миграции, тогда при работе с базой данных будут возникать ошибки, и вам придется прибегнуть к уловке (как делалось ранее), чтобы заставить инфраструктуру EF Core "поверить" в то, что миграции были применены. Кроме того, вам нужно будет вручную применить к базе данных любые специальные объекты SQL. В случае работы с миграциями для программного создания базы данных всегда используйте метод
, а неMigrate().EnsureCreated()Удаление, создание и очистка базы данных
Во время разработки нередко полезно удалять и воссоздавать рабочую базу данных и затем заполнять ее выборочными данными. В итоге получается среда, где тестирование (ручное или автоматизированное) может проводиться без опасения нарушить другие тесты из-за изменения данных. Создайте в проекте
новый каталог по имениAutoLot.Dalи поместите в него новый файл классаInitialization. Вот как должны выглядеть операторыSampleDatalnitializer.csв начале файла:usingusing System;using System.Collections.Generic;using System.Linq;using AutoLot.Dal.EfStructures;using AutoLot.Models.Entities;using AutoLot.Models.Entities.Base;using Microsoft.EntityFrameworkCore;using Microsoft.EntityFrameworkCore.Storage;Сделайте класс открытым и статическим:
namespace AutoLot.Dal.Initialization{public static class SampleDataInitializer{}}Создайте метод по имени
, который в качестве единственного параметра принимает экземплярDropAndCreateDatabase(). Этот метод использует свойствоApplicationDbContextэкземпляраDatabase, чтобы сначала удалить базу данных (с помощью методаApplicationDbContext) и затем создать ее заново (посредством методаEnsureDeleted()):Migrate()
