gpt4 book ai didi

c# - 如何更改 EF 小数截断行为

转载 作者:太空狗 更新时间:2023-10-30 01:58:24 25 4
gpt4 key购买 nike

在 Entity Framework 中,如果您将数据库中小数列的精度设置为 10,2,并在 EDMX 中更新它,它会自动将所有小数截断为小数点后两位,对吗?

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

是否有我可以设置的设置?还是我必须附加到 savingchanges 方法并进行一些反射(reflection)?

举例说明:

如果我有一个名为 Invoice 的表,其中有一列名为 Amount。在我的数据库中,这是一个 decimal(10,2) 列,这反射(reflect)在 EDMX 中,我的实体表示它的精度为 10,小数位数为 2。

然后在我的代码中,假设用户创建了一张发票并且他们输入了 10.23456 作为金额,我忘记为此添加某种客户端验证,所以金额被发送到服务器,然后我的 Controller 保存金额为 10.23456 的发票。 Entity Framework 会将其截断为 10.23 并完成。

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

最佳答案

您不能在 Entity Framework 上进行此配置。但是,如果您重写您的类并在属性上添加一些验证元数据,它将让您面临验证错误。例如

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

关于c# - 如何更改 EF 小数截断行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com