Я пытаюсь отобразить хранимую процедуру в моей базе данных на функцию в EF для построения запросов в моем коде с помощью LINQ.
Моя хранимая процедура возвращает / выбирает (пробовал ОБА, без разницы) целочисленное значение. Я могу отобразить в функцию и увидеть ее в коде (с правильными типами ввода / вывода), но всякий раз, когда я пытаюсь выполнить запрос, я получаю следующее исключение:
LINQ to Entities does not recognize the method 'System.Data.Objects.ObjectResult`1[System.Nullable`1[System.Int32]] HammingDistance(System.Nullable`1[System.Int64], System.Nullable`1[System.Int64])' method, and this method cannot be translated into a store expression.
LINQ, вызывающий ошибку:
db.HammingDistance(targetPhoto.Analysis.Hash, p.Analysis.Hash).FirstOrDefault().Value < 10
, который содержится в предложении where
. Без этой части запрос выполняется без проблем.
Да, моя процедура под названием HammingDistance принимает два long и возвращает int.
Я пытался создать его как функцию сервера SQL вместо хранимой процедуры, но потом я не могу импортировать ее как функцию, чего я и хочу. У меня есть сложные запросы, включающие процедуру (и протестированы в Management Studio, она работает и возвращает значение правильно), нет нулей ни в БД, ни в коде, это не проблема. Я дважды проверил, что моя процедура там и работает ПОСЛЕ ошибки, без изменений в коде SQL. Но LINQ не признает этого. И, наконец, ДА, мне нужно, чтобы это работало на SQL Server, я не могу обработать извлечение всех полей из БД и запустить на ASP.NET. Я знаю, что это можно сделать, и я почти уверен, что это проблема конфигурации, поскольку и моя БД, и веб-сайт, и запросы LINQ выполняются без вызова HammingDistance, но я просто не могу связать их в этот момент.