Son zamanlarda saklı yordamım tarafından döndürülen tablo verilere ek olarak tek bir değeri geri getirme nedenim oldu. EF, çoklu sonuç kümeleriyle saklı yordamları desteklemediğinden, bunu bir çıkış parametresi aracılığıyla gerçekleştirebileceğimi düşündüm. Ancak, bu yöntemi kullanarak, bazı sayısal değer alanları için yalnızca yuvarlanmış değerler aldığım bir sorunla karşılaştım.EF4'teki InOut ObjectParameter nasıl düzgün kullanılır?
@MyValue numeric(19,6) output
haritalama işlevini çağırarak, ben toplam:
benim saklı yordam parametre ilan edildi
var myValue = new ObjectParameter("MyValue", typeof(decimal));
List<MyResultItem> results = this.ObjectContext.CallMyStoredProc(someId, myValue).ToList();
Bu her zaman bir tam sayıya yuvarlanır değer döndürdü nedir (yani sıfır ölçeği).
elle manuel Hassas eklenmesi ve Ölçek niteliklerini tarafından .edmx için altta yatan XML düzenleyerek bu sorunu gidermek mümkün ilk: Bu oldu<Parameter Name="MyValue" Type="numeric" Mode="InOut" Precision="19" Scale="6" />
, şaşırtıcı olmayan, tamamen ben "gerçekleştirilen bir dahaki sefere atılır veritabanından Modeli güncelleyin .."
ben gibiObjectParameter
benim beyanı güncelleyerek daha güvenilir düzelttim gibi görünüyor:
var myValue = new ObjectParameter("MyValue", 999999999.999999M);
Ancak, bu bir kesmek gibi korkunç bir şey gibi görünüyor ve gelecekte (sadece bu sihirli sayı ile ilgili bakım olsa bile) sorunları hakkında endişeliyim. Varlık Çerçevesi içindeki çıktı parametrelerini kullanmanın daha iyi ve güvenilir bir yolu var mı?
.NET'teki ondalık basamaklar, bunların çalışıp çalışmadığını görmek için 0.0M veya 0.000000M kullanmayı denediniz mi? En azından biraz daha az "sihir" olurdu, sanırım varsayılan 0M'ye geri dönüyor (rakamsız) – XIU
@XIU Bunu neden yaptığını bilmiyorum, ama herhangi bir sayı ile 0..M geçersem Sıfırlar, sonra oluşan 'myValue.Value' her zaman 0'dır. Ayrıca, sorguya gönderdiğim ObjectParameters, ayarlanmak yerine DBNull'dır. Kesinlikle tuhaf. –
Olası kopya http://stackoverflow.com/questions/18166992/decimal-output-parameter-rounded-to-integer-in-ef5-0 –