Язык программирования 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>
ApplicationDbContext
Context.Set<T>()
Table
DbSet<T>
public DbSet<T> Table { get; }
protected BaseRepo(ApplicationDbContext context)
{
Context = context;
<b> Table = Context.Set<T>();</b>
_disposeContext = false;
}
Реализация метода SaveChanges()
Класс
BaseRepo
SaveChanges()
SaveChanges()
BaseRepo
public 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()
ChangeTracker
public virtual T? Find(int? id) => Table.Find(id);
Дополнительные два метода
Find()
Find()
ChangeTracker
AsNoTrackingWithldentityResolution()
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>
persist
SaveChanges()
virtual