2013-11-28 174 views
2

我在保存EntityFramework(Model First)中的小數時遇到了問題。 在我的EDMX我宣佈我的proprierty爲十進制(30,10),然後我試圖挽救數: 「1215867935736100000」EntityFramework:「參數值超出範圍。」

結果是:

Parameter value '1215867935736100000' is out of range. 

我試圖讓一個INSERT查詢與SQL Server 2008 R2管理工作室

INSERT INTO MyTable (MyColumn) VALUES (1215867935736100000) 

並且記錄保存正確。

你有什麼想法嗎?

感謝, 最大

+1

在SQL Server的表中生成什麼數據類型? – Kaido

+0

我想同樣的問題已經解決了這裏,按照以下鏈接 http://stackoverflow.com/questions/1455547/sql-server-decimal30-10-losing-last-2-decimals –

+0

你的精度是太大。您在該列中存儲什麼類型的數據?您應該熟悉[精度,縮放和長度](http://msdn.microsoft.com/zh-cn/library/ms190476.aspx)在SQL Server中的工作方式。 – James

回答

0

這可能是與EF的版本,您正在使用的問題。

我有一個代碼的第一個版本的問題,幾乎可以重現你得到的錯誤。我得到的錯誤在郵件中包含一個.00

{「參數值‘1215867935736100000.00’超出範圍。」}

我解決了它是添加.HasPrecision(30,10)EntityTypeConfiguration類的方式。

this.Property(t => t.value) 
    .HasColumnName("value") 
    .HasPrecision(30,10) //this line resolves the problem in my test code 
    .IsRequired(); 

這不解決您的問題,但我至少可以確認是可能的實體框架來寫值1215867935736100000到數據庫中。

CREATE TABLE [dbo].[TestTable1](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [value] [decimal](30, 10) NOT NULL 
) ON [PRIMARY] 

測試代碼:

MyContext testTableContext = new MyContext(); 
TestTable1 testTable1 = new TestTable1(); 
testTable1.value = 1215867935736100000; 
testTableContext.TestTable1.Add(testTable1); 
testTableContext.SaveChanges(); 
+0

SQL服務器不識別'm'後綴,C#使用它來區分'double' /'decimal'(或'float')。 – James

+0

@james的標題和標籤提到了一個叫做「Entity Framework」的東西,@Enthuns聲明他可以用原始Sql插入數據 - 需要C#解決方案。嘗試閱讀問題。 – qujck

+0

首先,我已經讀過這個問題。其次,你在答案中提出的觀點只適用於數字是* real *的情況下,即包含小數位(這個數值不是)。第三,問題在於試圖保存到數據庫,而不是填充EF模型,因此它表示DB服務器而不是客戶端的問題。 – James