using System.Collections.Generic;

using System.Linq;

using AutoLot.Dal.EfStructures;

using AutoLot.Dal.Models.Entities;

using AutoLot.Dal.Repos.Base;

using AutoLot.Dal.Repos.Interfaces;

using Microsoft.EntityFrameworkCore;

Измените класс на public, унаследуйте его от BaseRepo, реализуйте IMakeRepo и добавьте два обязательных конструктора:

namespace AutoLot.Dal.Repos

{

  public class MakeRepo : BaseRepo, IMakeRepo

  {

    public MakeRepo(ApplicationDbContext context)

      : base(context)

     {

    }

    internal MakeRepo(

      DbContextOptions options)

      : base(options)

    {

    }

  }

}

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

public override IEnumerable GetAll

  => Table.OrderBy(m => m.Name);

public override IEnumerable GetAllIgnoreQueryFilters

  => Table.IgnoreQueryFilters.OrderBy(m => m.Name);

<p id="AutBody_Root1006"><strong>Хранилище данных о заказах</strong></p>

Откройте файл класса 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 и реализуйте IOrderRepo:

namespace AutoLot.Dal.Repos

{

  public class OrderRepo : BaseRepo, IOrderRepo

  {

    public OrderRepo(ApplicationDbContext context)

      : base(context)

    {

    }

    internal OrderRepo(

      DbContextOptions options)

      : base(options)

    {

    }

  }

}

Реализуйте метод GetOrderViewModel, который возвращает экземпляр реализации IQueryable из представления базы данных:

public IQueryable GetOrdersViewModel

{

  return Context.CustomerOrderViewModels!.AsQueryable;

}

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

<p id="AutBody_Root1007"><strong>Программная работа с базой данных и миграциями</strong></p>

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

Как упоминалось в табл. 23.1, метод EnsureCreated создает базу данных, если она не существует, после чего создает таблицы, столбцы и индексы на основе сущностной модели. Никаких миграций он не применяет.

Если вы используете миграции, тогда при работе с базой данных будут возникать ошибки, и вам придется прибегнуть к уловке (как делалось ранее), чтобы заставить инфраструктуру EF Core "поверить" в то, что миграции были применены. Кроме того, вам нужно будет вручную применить к базе данных любые специальные объекты SQL. В случае работы с миграциями для программного создания базы данных всегда используйте метод Migrate, а не EnsureCreated.

<p id="AutBody_Root1008"><strong>Удаление, создание и очистка базы данных</strong></p>

Во время разработки нередко полезно удалять и воссоздавать рабочую базу данных и затем заполнять ее выборочными данными. В итоге получается среда, где тестирование (ручное или автоматизированное) может проводиться без опасения нарушить другие тесты из-за изменения данных. Создайте в проекте 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

{

Перейти на страницу:

Похожие книги