如何更改 EF 十进制截断行为

本文关键字:十进制 何更改 EF | 更新日期: 2023-09-27 18:34:22

在实体框架中,如果将数据库中小数列的精度设置为 10,2,并在 EDMX 中更新它,它会自动将任何小数截断到小数点后 2 位,对吗?

如果我给它一个带有一堆小数位的数字,我宁愿它在我的脸上爆炸,而不是让它默默地截断它,因为这意味着我没有正确验证我的数据。

有没有可以设置的设置? 还是我必须附加到 savingChanges 方法并进行一些反思?

举个例子来说明:

如果我有一个名为

发票的表,其中有一个名为"金额"的列。在我的数据库中,这是一个十进制(10,2(列,这反映在EDMX中,我的实体说它的精度为10,小数位数为2。

然后

在我的代码中,假设用户创建发票并输入 10.23456 作为金额,我忘了为此添加某种客户端验证,因此金额被发送到服务器,然后我的控制器保存金额为 10.23456 的发票。实体框架会将其截断为 10.23 并完成。

我想要的是这个:如果我尝试保存金额为 10.23456 的发票,EF 会看到我获得的值比我的实体允许的值更精确,并引发异常。因此,通过这种方式,我未能正确验证输入会立即被发现。

如何更改 EF 十进制截断行为

不能在实体框架上进行此配置。但是,如果您重写您的类并在属性上添加一些验证元数据,它将因验证错误而给您带来打击。例如

[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; }

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