Чтение онлайн

ЖАНРЫ

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

public virtual int Add(T entity, bool persist = true)

{

Table.Add(entity);

return persist ? SaveChanges : 0;

}

public virtual int AddRange(IEnumerable<T> entities, bool persist = true)

{

Table.AddRange(entities);

return persist ? SaveChanges : 0;

}

public virtual int Update(T entity, bool persist = true)

{

Table.Update(entity);

return persist ? SaveChanges : 0;

}

public virtual int UpdateRange(IEnumerable<T> entities, bool persist = true)

{

Table.UpdateRange(entities);

return persist ? SaveChanges : 0;

}

public virtual int Delete(T entity, bool persist = true)

{

Table.Remove(entity);

return persist ? SaveChanges : 0;

}

public virtual int DeleteRange(IEnumerable<T> entities, bool persist = true)

{

Table.RemoveRange(entities);

return persist ? SaveChanges : 0;

}

Есть

еще один метод удаления, который не следует этому шаблону. Для выдачи операции удаления он использует
EntityState
, что часто происходит при работе с ASP.NET Core с целью сокращения сетевого трафика:

public int Delete(int id, byte[] timeStamp, bool persist = true)

{

var entity = new T {Id = id, TimeStamp = timeStamp};

Context.Entry(entity).State = EntityState.Deleted;

return persist ? SaveChanges : 0;

}

Итак, класс

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

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

Каждая сущность будет иметь строго типизированное хранилище, производное от

BaseRepo<T>
, и интерфейс, который реализует
IRepo<T>
. Создайте в каталоге
Repos
проекта
AutoLot.Dal
новый каталог по имени
Interfaces
и добавьте в него пять файлов интерфейсов:

ICarRepo.cs

ICreditRiskRepo.cs

ICustomerRepo.cs

IMakelRepo.cs

IOrderRepo.cs

Содержимое интерфейсов будет представлено в последующих разделах.

Интерфейс хранилища данных об автомобилях

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

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

using System.Collections.Generic;

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Base;

Измените

интерфейс на
public
и реализуйте
IRepo<Car>
, как показано ниже:

namespace AutoLot.Dal.Repos.Interfaces

{

public interface ICarRepo : IRepo<Car>

{

IEnumerable<Car> GetAllBy(int makeId);

string GetPetName(int id);

}

}

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

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

ICreditRiskRepo.cs
. Интерфейс
ICreditRiskRep
не добавляет никакой функциональности сверх той, что предоставляется в
BaseRepo
. Обновите код следующим образом:

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Base;

namespace AutoLot.Dal.Repos.Interfaces

{

public interface ICreditRiskRepo : IRepo<CreditRisk>

{

}

}

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

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

ICustomerRepo.cs
. Интерфейс
ICustomerRepo
не добавляет никакой функциональности сверх той, что предоставляется в
BaseRepo
. Приведите код к такому виду:

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Base;

namespace AutoLot.Dal.Repos.Interfaces

{

public interface ICustomerRepo : IRepo<Customer>

{

}

}

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

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

IMakeRepo.cs
. Интерфейс
IMakeRepo
не добавляет никакой функциональности сверх той, что предоставляется в
BaseRepo
. Обновите код, как показано ниже:

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Base;

namespace AutoLot.Dal.Repos.Interfaces

{

public interface IMakeRepo : IRepo<Make>

{

}

}

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

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

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

Поделиться с друзьями: