EF Core 3.1 + Cosmos DB и Interceptor могут работать вместе? - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь использовать CosmosDb на Ef Core 3.1, он работает, но моя цель - использовать перехватчик для введения простого условия аренды. Я не нашел много документации для космоса, но для sql Сервера (вначале я думал, что это может работать, так как ef Core - это слой, построенный сверху).

Сначала я добавлю новую зависимость:

<PackageReference Include="Microsoft.EntityFrameworkCore.Cosmos" Version="3.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.3" />

Так что я могу использовать простой класс:

public class HintCommandInterceptor : DbCommandInterceptor
{

    public override InterceptionResult<DbDataReader> ReaderExecuting(
                 DbCommand command,
                 CommandEventData eventData,
                 InterceptionResult<DbDataReader> result)
    {
        Console.WriteLine(command.CommandText);
        return result;
    }
...

А на компоновщике после UseCosmos я добавляю: .AddInterceptors(new HintCommandInterceptor());

Не работает. Я пытаюсь переопределить все методы с помощью console.Writeline, но ничего не было зарегистрировано.

В конце я пришел к выводу, что просто с No Sql db (даже если он имеет интерфейс SQL) Перехватчики (или, скорее, DbCommandInterceptor) не работают, так как они определены в пакете, который, кажется, сделан для реляционного db:

<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.3" />

Так что я пытался сделать это неправильно. Может быть, есть конкретный c способ сделать это без наследования от DbCommandInterceptor, или, может быть, нет для No Sql db, поэтому я должен создать свой собственный слой перед каждой операцией ввода / чтения.

Или, может быть, быть там простая ошибка или другой способ сделать это?

...