Я перенесла мой проект из Linq-to-SQL в Entity Framework 6. После решения многих проблем я, наконец, пришел к одному Я не уверен, что делать с Это. После преобразования примерно одна треть моих модульных тестов терпит неудачу, потому что хранимые процедуры возвращают скалярные значения just work different way.Перенос хранимой процедуры из LINQ в SQL в Entity Framework 6
В Linq-to-SQL хранимая процедура возвращает возвращаемое значение. В EF они возвращают количество затронутых строк. Существуют обходные пути, которые требуют изменения хранимой процедуры (обычно от RETURN @retvalue
до SELECT @retvalue
). Но это требует изменений в T-SQL. Проект по-прежнему содержит некоторый старый код из старых дней ASP.NET, например aspnet_Membership_CreateUser
и так далее. Это означает, что я не могу изменить эти хранимые процедуры, потому что они частично используются поставщиком членства ASP.NET ADO.NET, частично кодом Linq-to-SQL. Решение, которое я рассматриваю, заключается в том, чтобы сделать обертку T-SQL из этих частей устаревшим кодом.
Еще одна причина, по которой я хотел бы сохранить хранимую процедуру без изменений, - это возможность возврата к предыдущей фиксации, если обновление до EF не выполняется. A не хотите менять базу данных вперед и назад. Но эта причина не так сильна, это касается только моей лени.
Я знаю, что поставщик членства старомодный, но я не могу переписать все приложение в одном коммите, мне нужно сохранить его стабильным.
Лучший способ завершить миграцию - вызвать хранимую процедуру из EF, например Linq-to-SQL, но я не нашел способ ее использования. EF разочаровал меня в этом. Как возможно, что после лет разработки EF не поддерживает возврат скалярного значения из хранимой процедуры?
Как вы решили эту проблему?
Наконец-то я закончил решение, размещенное выше. ExecuteSqlCommand будет работать, но я не могу автоматически генерировать/обновлять модель из базы данных. – qub1n