Десятичный выходной параметр, округленный до целого числа в EF5.0
Мы используем существующую хранимую процедуру базы данных, аналогичную приведенной ниже, которая возвращает десятичный вывод,
CREATE PROCEDURE spTest(@a int, @b decimal(18,2) output)
as
BEGIN
SELECT @b=23.22
SELECT * FROM <TABLE> where id = @a
END
Когда я вызываю хранимую процедуру в приложении C # (код ниже), я получаю результат для выходного параметра как 23 вместо 23.22
ObjectParameter b = new ObjectParameter("b", typeof(System.Decimal))
var result = myentities.context.spTest(1234, b)
Это точно такая же проблема, опубликованная Имре Хорватом (http://social.msdn.microsoft.com/Forums/en-US/14bdde82-c084-44dd-ad83-c1305cb966d2/decimal-output-parameter-rounded-to-integer) но разница в том, что мы используем SQL Server 2008 и Entity Framework 5.0. Прочитав предложение из его поста, я открыл файл edmx в редакторе xml и заметил следующее для выходного параметра @b, как показано ниже:
<Parameter Name="b" Type="decimal" Mode="InOut"/>;
Я изменил это на
<Parameter Name="b" Type="decimal" Mode="InOut" Precision="18" Scale="2"/>;
и запустить приложение, и я получил результат, как и ожидалось (23.22)
Это обходной путь, но не решение, поскольку вы знаете, что изменения будут потеряны, когда мы обновим хранимую процедуру в конструкторе структуры сущностей. В нашей базе данных у нас есть много хранимых процедур, которые имеют десятичный (18,2) в качестве выходного параметра. Я задаюсь вопросом, это все еще проблема в структуре лица 5.0. Ваша помощь будет высоко ценится.
Кумар