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()
, чтобы они сортировали значения
Make
по названиям:
public override IEnumerable<Make> GetAll()
=> Table.OrderBy(m => m.Name);
public override IEnumerable<Make> GetAllIgnoreQueryFilters()
=> Table.IgnoreQueryFilters().OrderBy(m => m.Name);
Хранилище данных о заказах
Откройте файл класса
OrderRepo.cs
и поместите в его начало следующие операторы
using
:
using AutoLot.Dal.EfStructures;
using AutoLot.Dal.Models.Entities;
using AutoLot.Dal.Repos.Base;
using AutoLot.Dal.Repos.Interfaces;
using Microsoft.EntityFrameworkCore;
Измените класс на
public
, унаследуйте его от
BaseRepo<Order>
и реализуйте
IOrderRepo
:
namespace 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
класса
DbContext
предлагает программные методы для удаления и создания базы данных, а также для запуска всех миграций. В табл. 23.1 описаны методы, соответствующие указанным операциям.
Как упоминалось в табл. 23.1, метод
EnsureCreated()
создает базу данных, если она не существует, после чего создает таблицы, столбцы и индексы на основе сущностной модели. Никаких миграций он не применяет.
Если вы используете миграции, тогда при работе с базой данных будут возникать ошибки, и вам придется прибегнуть к уловке (как делалось ранее), чтобы заставить инфраструктуру EF Core "поверить" в то, что миграции были применены. Кроме того, вам нужно будет вручную применить к базе данных любые специальные объекты SQL. В случае работы с миграциями для программного создания базы данных всегда используйте метод
Migrate()
, а не
EnsureCreated()
.
Удаление, создание и очистка базы данных
Во время разработки нередко полезно удалять и воссоздавать рабочую базу данных и затем заполнять ее выборочными данными. В итоге получается среда, где тестирование (ручное или автоматизированное) может проводиться без опасения нарушить другие тесты из-за изменения данных. Создайте в проекте
AutoLot.Dal
новый каталог по имени
Initialization
и поместите в него новый файл класса
SampleDatalnitializer.cs
. Вот как должны выглядеть операторы
using
в начале файла:
using 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()
):