Как отсоединить / не отслеживать сущность после добавления / обновления / удаления в EF Core 3 - PullRequest
0 голосов
/ 05 марта 2020

В нашем проекте мы используем 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;
        }
    }
...