2013-02-19 44 views
5

के लिए सेट किया गया है, मैं समझने की कोशिश कर रहा हूं कि ईटी स्कीमा मॉडल और डेटाबेस दोनों में एंटीटी फ्रेमवर्क 4 दो दशमलव तक क्यों चल रहा है, सटीकता 4 पर सेट की गई है।एंटीटी फ्रेमवर्क चार दशमलव पर गोल करता है जब सब कुछ चार दशमलव

यह दशमलव क्षेत्र में से एक के लिए मेरे स्कीमा परिभाषा है:

SellPrice specify a scale of 19,4

यह मेरा डेटाबेस परिभाषा है

CREATE TABLE OrderItems(
.... 
[SellPrice] [decimal](19, 4) NOT NULL, 
.... 

जब मैं कंप्यूटिंग उत्पाद की कीमत बेचने के बाद मेरे डालने क्वेरी निष्पादित, मैं देख नहीं है कि पर्याप्त दशमलव

SellPrice shows lots of decimals

MiniProfiler मेरी क्वेरी दिखाने के लिए और यह प्रदर्शित करता है कि मूल्य इसकी दशमलव

DECLARE ... 
     @15 Decimal = '100,54347826086956521739130435', 
     ... 

insert [dbo].[OrderItems](..., [SellPrice], ...) 
values (..., @15, ....) 
select [OrderItemId] 
from [dbo].[OrderItems] 
where @@ROWCOUNT > 0 and [OrderItemId] = scope_identity() 
है

लेकिन जब मैं Microsoft SQL प्रोफाइलर के माध्यम से देखो, SellPrice गोल है

exec sp_executesql N'insert [dbo].[OrderItems](..., [SellPrice], ...) 
values (..., @15, ...)', 
...,@15=100.54,...' 

मुझे यह पता लगाने में परेशानी है कि मूल्य कहां गोल किया जा रहा है।

+0

से मॉडल उत्पन्न करते हैं तो ईएफ डिफ़ॉल्ट भी होता है क्या यह पोस्ट मदद करता है? http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/c423a005-6a42-4f8d-aab6-e13fe3bdffba – mbeckish

उत्तर

3

एक अनुमान में, मैं कहता हूँ चाहते हैं कि आपके एसक्यूएल डेटाप्रकार money, नहीं decimal होना चाहिए ग # में decimal रूप नहींdecimal एसक्यूएल के समान है। विशेष रूप से, यदि आप एमएसडीएन दस्तावेज (http://msdn.microsoft.com/en-us/library/ms187746.aspx) को देखते हैं तो TSQL decimal प्रकार राज्य है;

ट्रांजैक्ट-एसक्यूएल कथन में, एक दशमलव बिंदु के साथ स्थिर स्वचालित रूप से आवश्यक न्यूनतम परिशुद्धता और स्केल का उपयोग करके एक संख्यात्मक डेटा मान में परिवर्तित हो जाता है। उदाहरण के लिए, निरंतर 12.345 को 5 की सटीकता के साथ एक संख्यात्मक मान में परिवर्तित किया जाता है और 3.

दशमलव या संख्यात्मक से फ्लोट या वास्तविक में कनवर्ट करने से परिशुद्धता का कुछ नुकसान हो सकता है।

यह स्पष्ट रूप से कहा नहीं कर रहा है कि यह आपके समस्या का कारण है, लेकिन मैं एक अच्छा अनुमान काफ़ी होगा यह है कि। money डेटाटाइप के साथ आपको अधिक भाग्य हो सकता है क्योंकि यह सबसे समतुल्य है और यदि आप मौजूदा डीबी

+2

मैंने फ़ील्ड को इसके बजाय पैसे पर सेट करने का प्रयास किया। यह काम नहीं करता। मैंने यह देखने के लिए सिर्फ एक और इकाई मॉडल करने की कोशिश की कि वे कैसे मानचित्र करेंगे और यह 1 9 का परिशुद्धता प्रदर्शित करता है और 4 का पैमाने प्रदर्शित करता है, लेकिन एसक्यूएल प्रोफाइलर अभी भी दशमलव (1 9,2) दिखाता है। यह कहीं और होना चाहिए, लेकिन मुझे कहां नहीं मिल रहा है। –

+1

@ पियरे-अलैनविजेंट, क्या आप स्पष्ट रूप से स्केल और प्रेसिजन सेट कर रहे हैं या जब आप ईएफ आरेख/डीबी को अपडेट करने का प्रयास करते हैं तो ये स्वचालित रूप से आपके लिए सेट होते हैं? एक और नोट पर, क्या आप पहले डेटाबेस या मॉडल बना रहे हैं? – DiskJunky