Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
}public void Dispose(){ Dispose(true); GC.SuppressFinalize(this);}private bool _isDisposed;protected virtual void Dispose(bool disposing){ if (_isDisposed) { return; } if (disposing) { if (_disposeContext) { Context.Dispose(); } } _isDisposed = true;}~BaseRepo(){ Dispose(false);}На свойства
DbSet<T>ApplicationDbContextContext.Set<T>()TableDbSet<T>public DbSet<T> Table { get; }protected BaseRepo(ApplicationDbContext context){ Context = context;<b> Table = Context.Set<T>();</b> _disposeContext = false;}Реализация метода SaveChanges()
Класс
BaseRepoSaveChanges()SaveChanges()BaseRepopublic int SaveChanges(){ try { return Context.SaveChanges(); } catch (CustomException ex) { // Подлежит надлежащей обработке -- уже зарегистрировано в журнале. throw; } catch (Exception ex) { // Подлежит регистрации в журнале и надлежащей обработке. throw new CustomException("An error occurred updating the database", ex); }}Реализация общих методов чтения
Следующий комплект методов возвращает записи с применением операторов LINQ. Метод
Find()ChangeTrackerpublic virtual T? Find(int? id) => Table.Find(id);Дополнительные два метода
Find()Find()ChangeTrackerAsNoTrackingWithldentityResolution()public virtual T? FindAsNoTracking(int id) => Table.AsNoTrackingWithIdentityResolution().FirstOrDefault(x => x.Id == id);Другая вариация удаляет из сущности фильтры запросов и затем применяет сокращенную версию (пропускающую метод
Where()FirstOrDefault()public T? FindIgnoreQueryFilters(int id) => Table.IgnoreQueryFilters().FirstOrDefault(x => x.Id == id);Методы
GetAll()public virtual IEnumerable<T> GetAll() => Table;public virtual IEnumerable<T> GetAllIgnoreQueryFilters() => Table.IgnoreQueryFilters();Метод
ExecuteQuery()public void ExecuteQuery(string sql, object[] sqlParametersObjects) => Context.Database.ExecuteSqlRaw(sql, sqlParametersObjects);Реализация методов добавления, обновления и удаления
Далее понадобится добавить блок кода, который будет служить оболочкой для соответствующих методов добавления, обновления и удаления, связанных со специфичным свойством
DbSet<T>persistSaveChanges()virtual