Как перехватить работу базы данных в EF core 3? - PullRequest
0 голосов
/ 11 октября 2019

Как перехватить перед операцией базы данных, например, выбрать / удалить / вставить / обновить, используя EF core 3 в PostgreSQL?

В новой функции EF core 3.0 https://docs.microsoft.com/en-gb/ef/core/what-is-new/ef-core-3.0/#interception-of-database-operations, DbCommandInterceptor естьиспользуется для этого. Однако я не смог найти ни этот класс, ни AddInterceptors.

Нужно ли устанавливать новый nuget или использовать определенное пространство имен?

1 Ответ

0 голосов
/ 11 октября 2019

Я нашел то, что мне нужно, и успешно реализовал.

using System.Data.Common;
using Microsoft.EntityFrameworkCore.Diagnostics;

public class RowLevelSecurityInterceptor : DbCommandInterceptor
{
  public override InterceptionResult<DbDataReader> ReaderExecuting(
    DbCommand command,
    CommandEventData eventData,
    InterceptionResult<DbDataReader> result)
  {
    // command.CommandText += " OPTION (OPTIMIZE FOR UNKNOWN)";
    return result;
  }
}
public class MyDbContext : DbContext
{
  // previous codes
  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  {

    optionsBuilder
      .UseNpgsql(GetConnectionString())
      .AddInterceptors(new RowLevelSecurityInterceptor());
    }
  }
}
...