Язык программирования C#9 и платформа .NET5
using AutoLot.Models.Entities;using AutoLot.Dal.Repos.Base;namespace AutoLot.Dal.Repos.Interfaces{public interface IMakeRepo : IRepo<Make>{}}Интерфейс хранилища данных о заказах
Откройте файл
. Поместите в начало файла следующие операторыIOrderRepo.cs:usingusing 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.DalCarRepo.csCreditRiskRepo.csCustomerRepo.csMakeRepo.csOrderRepo.csКлассы хранилищ будут реализованы в последующих разделах.
Хранилище данных об автомобилях
Откройте файл класса
и поместите в его начало показанные ниже операторыCarRepo.cs:usingusing 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>:ICarReponamespace AutoLot.Dal.Repos{<b>public</b> class CarRepo : <b>BaseRepo<Car>, ICarRepo</b>{}}Каждый класс хранилища должен реализовывать два конструктора из
:BaseRepopublic CarRepo(ApplicationDbContext context) : base(context){}internal CarRepo(DbContextOptions<ApplicationDbContext> options):base(options){}Добавьте переопределенные версии методов
иGetAll()для включения свойстваGetAllIgnoreQueryFilters()и упорядочения по значениюMakeNavigation:PetNamepublic override IEnumerable<Car> GetAll()=> Table.Include(c => c.MakeNavigation).OrderBy(o => o.PetName);public override IEnumerable<Car> GetAllIgnoreQueryFilters()=> Table.Include(c => c.MakeNavigation).OrderBy(o => o.PetName).IgnoreQueryFilters();Реализуйте метод
. Перед выполнением он обязан установить фильтр для контекста. Включите навигационное свойствоGetAllBy()и отсортируйте по значениюMake:PetNamepublic IEnumerable<Car> GetAllBy(int makeId){return Table.Where(x => x.MakeId == makeId).Include(c => c.MakeNavigation).OrderBy(c => c.PetName);}Добавьте переопределенную версию
, в которой включается свойствоFind(), а фильтры запросов игнорируются:MakeNavigationpublic override Car? Find(int? id)=> Table