Язык программирования C#9 и платформа .NET5
Часть 447 из 642 Информация о книге
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;}Есть еще один метод удаления, который не следует этому шаблону. Для выдачи операции удаления он использует
, что часто происходит при работе с ASP.NET Core с целью сокращения сетевого трафика:EntityStatepublic 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и добавьте в него пять файлов интерфейсов:InterfacesICarRepo.csICreditRiskRepo.csICustomerRepo.csIMakelRepo.csIOrderRepo.csСодержимое интерфейсов будет представлено в последующих разделах.
Интерфейс хранилища данных об автомобилях
Откройте файл
и поместите в его начало такие операторыICarRepo.cs:usingusing 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. Обновите код следующим образом:BaseRepousing AutoLot.Models.Entities;using AutoLot.Dal.Repos.Base;namespace AutoLot.Dal.Repos.Interfaces{public interface ICreditRiskRepo : IRepo<CreditRisk>{}}Интерфейс хранилища данных о заказчиках
Откройте файл
. ИнтерфейсICustomerRepo.csне добавляет никакой функциональности сверх той, что предоставляется вICustomerRepo. Приведите код к такому виду:BaseRepousing AutoLot.Models.Entities;using AutoLot.Dal.Repos.Base;namespace AutoLot.Dal.Repos.Interfaces{public interface ICustomerRepo : IRepo<Customer>{}}Интерфейс хранилища данных о производителях
Откройте файл
. ИнтерфейсIMakeRepo.csне добавляет никакой функциональности сверх той, что предоставляется вIMakeRepo. Обновите код, как показано ниже:BaseRepo