2013-08-10 9 views
6

Stiamo utilizzando database memorizzato procedura simile a quello qui sotto che restituisce in uscita decimale esistente,parametro di uscita decimale arrotondato al numero intero in 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 

Quando chiamo la stored procedure in in C# app (codice qui sotto) ottengo il risultato per il parametro di uscita come 23 invece di 23,22

ObjectParameter b = new ObjectParameter("b", typeof(System.Decimal)) 
var result = myentities.context.spTest(1234, b) 

Questo esattamente lo stesso problema postato da Imre Horvath (http://social.msdn.microsoft.com/Forums/en-US/14bdde82-c084-44dd-ad83-c1305cb966d2/decimal-output-parameter-rounded-to-integer), ma la differenza è che si utilizza SQL Server 2008 e Entity framework 5.0. Dopo aver letto il suggerimento dal suo incarico ho aperto il file edmx in editor XML e ho notato quanto segue per il parametro di uscita @b come sotto,

<Parameter Name="b" Type="decimal" Mode="InOut"/>; 

ho cambiato in

<Parameter Name="b" Type="decimal" Mode="InOut" Precision="18" Scale="2"/>; 

ed eseguire il applicazione e ho ottenuto il risultato come previsto (23.22)

Questo è un aggiramento ma non una soluzione poiché si sa che le modifiche andranno perse quando si aggiorna la procedura memorizzata nella finestra di progettazione dell'entità. Nel nostro database abbiamo un sacco di stored procedure che ha decimale (18,2) come parametro di output. Mi chiedo se questo sia ancora un problema nel framework di entità 5.0. Il tuo aiuto sarà molto apprezzato.

Kumar

risposta

2

No, questo non è stato risolto di EF 5.0 Probabilmente non sarà fissato in 6.0 sia.

UPDATE:
ho recentemente aggiornato alla EF 6.0, e no, il problema non è ancora risolto. Suppongo che l'EF 6.0 sia ora Open Source in modo che tu possa sempre aggiustarlo da solo se ti trovi in ​​quel tipo di cose.

3

In EF6, ho avuto lo stesso problema! Ma trova una soluzione semplice. cerco di impostare il valore ObjectParameter uscita, poi tornare decimale con la scala, come 5602,86

public decimal GetQuotationAmount(string rec_id, decimal price) 
{ 
    ObjectParameter qTA_AMT = new ObjectParameter("QTA_AMT", typeof(decimal)); 
    qTA_AMT.Value = 100000.00m; 
    db.GRP_Calc_QuotationAmount(rec_id, price,qTA_AMT); 
    return Convert.ToDecimal(qTA_AMT.Value); 
} 
8

Ho avuto lo stesso problema con voi e ho risolto dopo ho fatto riferimento da questo articolo http://tiku.io/questions/1120572/decimal-output-parameter-rounded-to-integer-in-ef5-0

Esistono 3 passaggi per risolvere questo problema:

  1. Fare clic con il pulsante destro del mouse su edmx file => Apri con ... => XML (testo) Editor.
  2. ricerca <Parameter Name="b" Type="numeric" Mode="InOut" /> poi sostituirlo con <Parameter Name="b" Type="numeric" Mode="InOut" Precision="20" Scale="2" />
  3. testo da ricercare <Parameter Name="b" Mode="InOut" Type="Decimal" /> poi sostituirlo con <Parameter Name="b" Mode="InOut" Type="Decimal" Precision="20" Scale="2" />

Spero che questo vi aiuterà!

Problemi correlati