«Не удалось перевести выражение» Ошибка при попытке вставить с использованием классов LINQ to SQL с пользовательским SP - PullRequest
4 голосов
/ 11 ноября 2010

Использование классов LINQ to SQL и следующий код:

clindt.clinDataContext ctx = new clindt.clinDataContext();

clindt.RoleMembership rm = new clindt.RoleMembership();
rm.Created_By ="bob";
rm.Modified_By ="bob";
rm.ProfileID = 2;
rm.RoleID=1;
rm.Created_Date = DateTime.Now;
rm.Modified_Date = DateTime.Now;

ctx.RoleMemberships.InsertOnSubmit(rm);
ctx.SubmitChanges();

Я получаю эту ошибку:

«Не удалось перевести выражение» (clindt.clinDataContext)p_InsertRoleMembership (0, 2, 1, 10.11.2010 14:33:38, «bob», 10.11.2010 14:33:38, «bob») 'в SQL и не может обрабатывать его каклокальное выражение. "

Дополнительная информация: Классы настроены на использование пользовательской хранимой процедуры для вставок.Эта ошибка возникает только с 3 из моих таблиц.Интересно, что все они находятся в схеме под названием «Безопасность».Каждая другая таблица находится в схеме 'dbo'.

Ответы [ 2 ]

15 голосов
/ 23 ноября 2010

Я видел такое поведение, когда вы пытаетесь добавить хранимую процедуру, и дизайнер не может определить тип возвращаемого значения, который генерирует сообщение, подобное этому:

"Типы возврата для следующих сохраненныхпроцедуры не могут быть обнаружены ... "

если вы посмотрите на сгенерированный DBML, вы увидите сгенерированную подпись:

  <Return Type="object" />
</Function>

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

Вы можете исправить проблему, отредактировав файл .dbml: просто измените сигнатуру на правильный тип возвращаемого значения (обычно Int).

  <Return Type="System.Int32" />
</Function>

Затем необходимо восстановитьдля повторного создания остальных файлов.

Или, если вы предпочитаете, чтобы дизайнер делал следующее:

  • Удалите процедуру из Dbml, иначе вы не будетевозможность изменить тип возврата.

  • Добавить хранимую процедуру и игнорировать ошибку «Типы возврата ...».

  • Перейти кхранимая процедура (Свойства | ВозвратТип) и измените тип с пустого на ваш тип, в моем случае было Int.Выберите «Да», когда появится сообщение «Эта операция не может быть отменена ...».Возврат будет отображаться как «None», но внутри он сгенерирует тип возврата Int (вы можете проверить файл .cs).

  • Перестроить проект.

Теперь все готово.

0 голосов
/ 10 мая 2014

Вы должны определить тип вывода SP после перетаскивания в файл DBML

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