2012-05-17 32 views
4

在實體框架中,如果您將數據庫中小數列的精度設置爲10,2並在EDMX中更新它,它將自動將任何小數截斷爲2位小數,正確?如何更改EF十進制截斷行爲

我寧願它在我的臉上炸開一個例外,如果我給它一個小數位的數字比它默默截斷它,因爲這意味着我沒有正確驗證我的數據。

有沒有可以設置的設置?或者我將不得不附加到savingchanges方法並做一些反思?

爲了用一個例子闡明:

如果我有一個名爲發票與一列名爲金額表。在我的數據庫中,這是一個十進制(10,2)列,這反映在EDMX中,我的實體說它具有10的精度和2的刻度。

然後在我的代碼中,讓我們說用戶創建一張發票,他們輸入10.23456作爲金額,我忘記爲此添加某種客戶端驗證,因此金額被髮送到服務器,然後我的控制器保存了一個金額爲10.23456的發票。實體框架將截斷到10.23並完成它。

我想要的是這樣的: 如果我試着用10.23456作爲金額保存發票,那麼EF會看到我得到了比我的實體允許的更精確的值,並引發異常。所以這種方式我沒有正確驗證輸入是馬上發現的。

+0

你能澄清用一個例子的問題? – daryal

+0

不用擔心,看到我的更新後文章 – RodH257

回答

0

您不能在實體框架上進行此配置。但是,如果你重寫你的類並在屬性上添加一些驗證元數據,它將面臨驗證錯誤。 例如

[RegularExpression(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", 
        ErrorMessage = "ERROR MESSAGE")] 
public string Email { get; set; } 

OR

[StringLength(255, MinimumLength = 0, ErrorMessage = "ERROR MESSAGE")] 
public string FriendlyName { get; set; } 
+0

感謝您的回答,但不幸的是,我不認爲這會對我們的情況有所幫助,因爲我們正在查看具有一定小數位數的十進制值,我們希望發生異常而不是驗證消息。我們仍在向客戶端添加驗證,但我們希望引發異常作爲最後一道防線。 – RodH257