Литмир - Электронная Библиотека
A
A

namespace AutoLot.Dal.Repos

{

  <b>public</b> class MakeRepo : <b>BaseRepo&lt;Make&gt;, IMakeRepo</b>

  {

    public MakeRepo(ApplicationDbContext context)

      : base(context)

     {

    }

    internal MakeRepo(

      DbContextOptions&lt;ApplicationDbContext&gt; options)

      : base(options)

    {

    }

  }

}

Переопределите методы

GetAll()
, чтобы они сортировали значения
Make
по названиям:

public override IEnumerable&lt;Make&gt; GetAll()

  =&gt; Table.OrderBy(m =&gt; m.Name);

public override IEnumerable&lt;Make&gt; GetAllIgnoreQueryFilters()

  =&gt; Table.IgnoreQueryFilters().OrderBy(m =&gt; 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&lt;Order&gt;
и реализуйте
IOrderRepo
:

namespace AutoLot.Dal.Repos

{

  <b>public</b> class OrderRepo : <b>BaseRepo&lt;Order&gt;, IOrderRepo</b>

  {

    public OrderRepo(ApplicationDbContext context)

      : base(context)

    {

    }

    internal OrderRepo(

      DbContextOptions&lt;ApplicationDbContext&gt; options)

      : base(options)

    {

    }

  }

}

Реализуйте метод

GetOrderViewModel()
, который возвращает экземпляр реализации
IQueryable&lt;CustomOrderViewModel&gt;
из представления базы данных:

public IQueryable&lt;CustomerOrderViewModel&gt; GetOrdersViewModel()

{

  return Context.CustomerOrderViewModels!.AsQueryable();

}

На этом реализация всех классов хранилищ завершена. В следующем разделе будет написан код для удаления, создания и начального заполнения базы данных.

Программная работа с базой данных и миграциями

Свойство

Database
класса
DbContext
предлагает программные методы для удаления и создания базы данных, а также для запуска всех миграций. В табл. 23.1 описаны методы, соответствующие указанным операциям.

Язык программирования C#9 и платформа .NET5 - _175.png

Как упоминалось в табл. 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()
):

450
{"b":"847442","o":1}