В нашем проекте мы используем EF Core 3.1, поскольку он генерирует Entity как POCO, поэтому мы используем эти POCO в качестве моделей, которые будут использоваться в контроллере, BAL и DAL (DAL - это единица работы и репозиторий). При регистрации контекста БД в файле запуска мы пометили контекст БД как не отслеживаемый.
services.AddDbContext<DBContext>(options =>
options.UseSqlServer(ConfigurationHandler.AppSettings.DBConnection).UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking)
Итак, теперь мы ищем способ сохранить эти модели независимыми, если мы используем эти модели для добавления / обновления. данные в DAL (хранилище), поэтому их не следует отслеживать даже после сохранения, обновления и удаления.
Student getData = await Repository.GetEntityAsync(id).ConfigureAwait(false);
getData.Name = "Update With Repository Method";
Repository.Update(getData);
getData.Name = "Modify entity after Repository Update Method.";
await unitOfWork.CommitAsync().ConfigureAwait(false);
В приведенном выше значении имени метода, сохраняемого в БД, указано «Изменить сущность после метода обновления хранилища». но мы хотим это только «Обновить с помощью метода репозитория». Поэтому, если мы вызываем метод обновления, эта модель (Студент) не должна отслеживаться.
Реализация метода обновления в репозитории
public virtual void Update(TEntity entity)
{
DbContext.Entry(entity).State = EntityState.Modified;
}
Реализация метода фиксации в единицах работы:
public async Task<bool> CommitAsync()
{
try
{
await DbContext.SaveChangesAsync();
return true;
}
}