Выбери любимый жанр
Мир литературы

Выбрать книгу по жанру

Фантастика и фэнтези

Детективы и триллеры

Проза

Любовные романы

Приключения

Детские

Поэзия и драматургия

Старинная литература

Научно-образовательная

Компьютеры и интернет

Справочная литература

Документальная литература

Религия и духовность

Юмор

Дом и семья

Деловая литература

Жанр не определен

Техника

Прочее

Драматургия

Фольклор

Военное дело

Последние комментарии
Сергей2018-11-27
Не книга, а полная чушь! Хорошо, что чит
К книге
Lynxlynx2018-11-27
Читать такие книги полезно для расширени
К книге
Leonika2016-11-07
Есть аналоги и покрасивее...
К книге
Важник2018-11-27
Какое-то смутное ощущение после прочтени
К книге
Aida2018-11-27
Не книга, а полная чушь! Хорошо, что чит
К книге

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 448


448
Изменить размер шрифта:

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Base;

namespace AutoLot.Dal.Repos.Interfaces

{

  public interface IMakeRepo : IRepo<Make>

  {

  }

}

Интерфейс хранилища данных о заказах

Откройте файл

IOrderRepo.cs
. Поместите в начало файла следующие операторы
using
:

using System.Collections.Generic;

using System.Linq;

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Base;

using AutoLot.Models.ViewModels;

Измените интерфейс на

public
и реализуйте
IRepo<Order>
:

namespace AutoLot.Dal.Repos.Interfaces

{

  public interface IOrderRepo : IRepo<Order>

  {

    IQueryable<CustomerOrderViewModel> GetOrdersViewModel();

  }

}

Интерфейс на этом завершен, т.к. все необходимые конечные точки API раскрыты в базовом классе.

Реализация классов хранилищ, специфичных для сущностей

Большую часть своей функциональности реализуемые классы хранилищ получают от базового класса. Далее будут описаны функциональные средства, которые добавляются или переопределяют возможности, предлагаемые базовым классом хранилища. Создайте в каталоге

Repos
проекта
AutoLot.Dal
пять новых файлов классов хранилищ:

CarRepo.cs

CreditRiskRepo.cs

CustomerRepo.cs

MakeRepo.cs

OrderRepo.cs

Классы хранилищ будут реализованы в последующих разделах.

Хранилище данных об автомобилях

Откройте файл класса

CarRepo.cs
и поместите в его начало показанные ниже операторы
using
:

using System.Collections.Generic;

using System.Data;

using System.Linq;

using AutoLot.Dal.EfStructures;

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Base;

using AutoLot.Dal.Repos.Interfaces;

using Microsoft.Data.SqlClient;

using Microsoft.EntityFrameworkCore;

Измените класс на

public
, унаследуйте его от
BaseRepo<Car>
и реализуйте
ICarRepo
:

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

namespace AutoLot.Dal.Repos

{

  <b>public</b> class CarRepo : <b>BaseRepo&lt;Car&gt;, ICarRepo</b>

  {

  }

}

Каждый класс хранилища должен реализовывать два конструктора из

BaseRepo
:

public CarRepo(ApplicationDbContext context) : base(context)

{

}

internal CarRepo(DbContextOptions&lt;ApplicationDbContext&gt; options)

  :
 base(options)

{

}

Добавьте переопределенные версии методов

GetAll()
и
GetAllIgnoreQueryFilters()
для включения свойства
MakeNavigation
и упорядочения по значению
PetName
:

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

  =&gt; Table

            .Include(c =&gt; c.MakeNavigation)

            .OrderBy(o =&gt; o.PetName);

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

  =&gt; Table

            .Include(c =&gt; c.MakeNavigation)

            .OrderBy(o =&gt; o.PetName)

            .IgnoreQueryFilters();

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

GetAllBy()
. Перед выполнением он обязан установить фильтр для контекста. Включите навигационное свойство 
Make
и отсортируйте по значению
PetName
:

public IEnumerable&lt;Car&gt; GetAllBy(int makeId)

{

  return Table

    .Where(x =&gt; x.MakeId == makeId)

    .Include(c =&gt; c.MakeNavigation)

    .OrderBy(c =&gt; c.PetName);

}

Добавьте переопределенную версию

Find()
, в которой включается свойство
MakeNavigation
, а фильтры запросов игнорируются:

public override Car? Find(int? id)

  =&gt; Table