używamy istniejącej bazy danych przechowywane procedury podobnej do poniższego która zwraca wyjście dziesiętną,dziesiętny parametr wyjściowy w zaokrągleniu do liczby całkowitej w 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
Kiedy wywołać procedurę przechowywaną w aplikacji w C# (kod poniżej) uzyskać wynik w parametrze wyjściowym jako 23 zamiast 23.22
ObjectParameter b = new ObjectParameter("b", typeof(System.Decimal))
var result = myentities.context.spTest(1234, b)
To dokładnie ten sam problem wysłane przez Imre Horváth (http://social.msdn.microsoft.com/Forums/en-US/14bdde82-c084-44dd-ad83-c1305cb966d2/decimal-output-parameter-rounded-to-integer), ale różnica jest używamy SQL Server 2008 i entity Framework 5.0. Po zapoznaniu się z sugestią ze stanowiska mam otwarty plik edmx w edytorze XML i zauważyłem następujące parametru wyjściowego @b jak poniżej,
<Parameter Name="b" Type="decimal" Mode="InOut"/>;
Zmieniłem go
<Parameter Name="b" Type="decimal" Mode="InOut" Precision="18" Scale="2"/>;
i uruchom aplikacji i uzyskałem wynik zgodnie z oczekiwaniami (23.22)
To jest praca, ale nie jest rozwiązaniem, ponieważ wiesz, że zmiany zostaną utracone, gdy zaktualizujemy procedurę przechowywaną w projektancie struktury obiektu. W naszej bazie danych mamy wiele procedur przechowywanych, które mają dziesiętny (18,2) jako parametr wyjściowy. Zastanawiam się, czy nadal jest to problem w strukturze encji 5.0. Twoja pomoc będzie bardzo cenna.
Kumar