Для нас решением было заставить EF прочитать возврат хранимого процесса, добавив к нему функцию .FirstOrDefault ().
я есть хранимая процедура, которая возвращает значение, а не набор данных, и у меня возникают проблемы с его настройкой для работы с EF4.
Я видел это:http://dotnet.dzone.com/news/how-retrieve-stored-procedure
Вот что я сделал: я добавил процедуру в модель и импортировал функцию.
Первой проблемой, с которой я столкнулся, было то, что параметры в моей процедуре были названы как@_Parameter_in
, Это заставило EF привести их какp_Parameter_in
потому что это не будет работать с подчеркиванием в качестве первого символа. Затем, когда я вызвал хранимую процедуру, я вижу в вызове SQL Profiler, что он ищет@p_Parameter_in
и, конечно, была проблема с этим.
Теперь я переименовал параметры и посмотрел в SQL Trace - все выглядит и работает отлично. Проблема в том, что я не могу получить значение. Вот как выглядит мой код:
System.Data.Objects.ObjectParameter newKey = new System.Data.Objects.ObjectParameter("NewKey_out", typeof(Int32));
newKey.Value = 0;
context.GetNextSurrogateKey_v2("tTest", newKey);
После звонкаnewKey.Value
, это всегда 0 или любое другое значение, которое я установил. Это не возвращает значение. Я подозреваю, что моя проблема заключается в том, как я импортирую функцию. Я использую скаляры и тип данныхInt32
, «Создать новый сложный тип» для меня почему-то отключен. У кого-нибудь была такая проблема?