Как использовать параметры в Linq FromSQL Query - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь получить список из таблицы местоположений и исключить местоположения, уже назначенные пользователю.Я пытаюсь использовать Linq FromSQL.Если я жестко кодирую параметр user.Id, запрос работает, когда я использую переменную user.Id, он не работает.Запрос возвращает все записи.Когда я запускаю отладчик, переменная user.Id является правильной.Вот мой код ...

ApplicationUser user = await _userManager.FindByNameAsync(Id);

var unassignedLocations = await _context.Location
       .FromSql($"SELECT * FROM Locations WHERE Id NOT IN (SELECT LocationId FROM UserLocations WHERE UserID='{user.Id}')")
       .OrderBy(l => l.Name)
       .ToListAsync();

Locations = new SelectList(unassignedLocations, "Id", "Name");

1 Ответ

0 голосов
/ 24 февраля 2019

Проблема заключается в том, что заключенные в кавычки значения

UserID='{user.Id}'

При использовании перегрузки метода FromSql с интерполированной строкой SQL вместо встраивания значения в строку SQL (что допускает атаки с использованием SQL-инъекций), EF Core будет связывать параметр для каждого заполнителя внутри строки - в этом случае, один параметр со значением = user.Id.

Следовательно, вы должны обращаться к значению напрямую без заключения в кавычки как константа:

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