Используя провайдера 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, так и с настоящий?