using AutoLot.Models.ViewModels;
Измените интерфейс на public
IRepo:namespace AutoLot.Dal.Repos.Interfaces
{
public interface IOrderRepo : IRepo
{
IQueryable
}
}
Интерфейс на этом завершен, т.к. все необходимые конечные точки 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 и реализуйте ICarRepo:namespace AutoLot.Dal.Repos
{
public
{
}
}
Каждый класс хранилища должен реализовывать два конструктора из BaseRepo
public CarRepo(ApplicationDbContext context) : base(context)
{
}
internal CarRepo(DbContextOptions
:
base(options){
}
Добавьте переопределенные версии методов GetAll()
GetAllIgnoreQueryFilters() для включения свойства MakeNavigation и упорядочения по значению PetName:public override IEnumerable
=> Table
.Include(c => c.MakeNavigation)
.OrderBy(o => o.PetName);
public override IEnumerable
=> Table
.Include(c => c.MakeNavigation)
.OrderBy(o => o.PetName)
.IgnoreQueryFilters();
Реализуйте метод GetAllBy()
Make и отсортируйте по значению PetName:public IEnumerable
{
return Table
.Where(x => x.MakeId == makeId)
.Include(c => c.MakeNavigation)
.OrderBy(c => c.PetName);
}
Добавьте переопределенную версию Find()
MakeNavigation, а фильтры запросов игнорируются:public override Car? Find(int? id)
=> Table
.IgnoreQueryFilters()
.Where(x => x.Id == id)
.Include(m => m.MakeNavigation)
.FirstOrDefault();
Добавьте метод, который позволяет получить значение PetName
public string GetPetName(int id)
{
var parameterId = new SqlParameter
{
ParameterName = "@carId",
SqlDbType = SqlDbType.Int,
Value = id,
};
var parameterName = new SqlParameter
{
ParameterName = "@petName",
SqlDbType = SqlDbType.NVarChar,
Size = 50,
Direction = ParameterDirection.Output
};
_ = Context.Database
.ExecuteSqlRaw("EXEC [dbo].[GetPetName] @carId, @petName OUTPUT",
parameterId,
parameterName); return (string)parameterName.Value;
}
Хранилище данных о кредитных рисках
Откройте файл класса CreditRiskRepo.cs
using: