Сравнение байтовых массивов с EF Core InMemoryDatabase для модульного тестирования - PullRequest
1 голос
/ 11 февраля 2020

Используя провайдера InMemoryDatabase, оператор == выполняет обычное сравнение ссылок байтовых массивов так же, как и для любых 2 обычных байтовых массивов в памяти. При выполнении запроса к фактической базе данных тот же оператор транслируется в команду SQL с использованием =, которая выполняет сравнение последовательностей.

У меня есть несколько запросов, которые ищут пользователя с использованием его Windows SID, который является типом байтового массива, например:

AppUser user = await appContext.AppUsers
    .SingleOrDefaultAsync(u => u.WindowsSid == currentIdentitySid);

При нормальной работе с реальной базой данных они работают, но я не могу выполнить их модульное тестирование, потому что запросы в модульных тестах по-прежнему выполняют сравнение ссылок. Если я изменю запрос на использование .SequenceEqual вместо ==, тогда они будут работать, но это не преобразуется в SQL при использовании реальной базы данных. Для этого существует задокументированная проблема: https://github.com/dotnet/efcore/issues/13260

Между тем, есть ли способ сделать byte[] сравнение, которое будет работать как с InMemoryDatabase, так и с настоящий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...