Запрос LinqPad выполняется нормально, но с ошибкой Linq to Entities работает в visual studio

120
11

Я создал запрос для тестирования в LinqPad, я не думаю, что запрос является чем-то особенным, но он выполняет функцию, хранящуюся в базе данных.

Я включил здесь запрос:

var opps = (from o in Entities.Table1
join oa in Entities.Table2 on o.Id equals oa.Table1Id
where (o.StatusId == 1)
&& oa.UserId == userId
select new
{
ID = o.Id,
Options = Entities.GetOptions(o.Id),
LastUpdated = o.UpdatedDate
}).ToList();

Теперь, запуская это в LinqPad, никаких ошибок не возникает, но если я запускаю один и тот же код внутри функции в моем проекте С#, я получаю следующее сообщение об ошибке.

LINQ to Entities does not recognize the method 'System.Linq.IQueryable'1[Dal.GetOptionsReturnModel] GetOptions(System.Nullable'1[System.Int64])' method, and this method cannot be translated into a store expression.

Комментируя строку:

*Options = Entities.GetOptions(o.Id),*

Устраняет проблему, поэтому я знаю, что это связано с этим, но я не могу понять, почему она работает в LinqPad.

Обновить

GetOptions - это функция в базе данных sql-сервера.

Обновление 2

Спасибо за ответы, я заметил, что я не поместил ошибку по этому вопросу. Право исправить это сейчас.

Исходное сообщение об ошибке было

LINQ to Entities does not recognize the method 'System.Linq.IQueryable'1[Dal.GetOptionsReturnModel] GetOptions(System.Nullable'1[System.Int64])' method, and this method cannot be translated into a store expression.

После применения IEnumerable ошибка изменится на:

"System.Data.Entity.Core.EntityCommandExecutionException",
"An error occurred while executing the command definition. See the inner exception for details.",
"There is already an open DataReader associated with this Command which must be closed first.",
" at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)\r\n at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)\r\n

Обновление 3

Не уверен, что это помогает, но в Visual Studio я использую EF 6.0.0

спросил(а) 2017-11-02T18:47:00+03:00 2 года, 11 месяцев назад
1
Решение
98

все еще не уверен, что вызвало это, но я думаю, что это как-то связано с обновлением надстройки EF.POCO.Generator. Я создал новую ClassLibrary и при использовании v2.33.0 надстройки все работает нормально.

Проблемы возникли из версии надстройки v2.23.0.

ответил(а) 2017-11-13T13:14:00+03:00 2 года, 10 месяцев назад
41

Использовать AsEnumerable() с запросом


  var opps = (from o in Entities.Table1.AsEnumerable()
join oa in Entities.Table2 on o.Id equals oa.Table1Id
where (o.StatusId == 1)
&& oa.UserId == userId
select new
{
ID = o.Id,
Options = Entities.GetOptions(o.Id),
LastUpdated = o.UpdatedDate
}).ToList();

ответил(а) 2017-11-03T07:07:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема