4

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

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

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

用一个例子来澄清:

如果我有一个名为 Invoice 的表,其中有一列名为 Amount。在我的数据库中,这是一个小数 (10,2) 列,这反映在 EDMX 中,我的实体说它的精度为 10,比例为 2。

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

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

4

1 回答 1

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

或者

[StringLength(255, MinimumLength = 0, ErrorMessage = "ERROR MESSAGE")]
public string FriendlyName { get; set; }
于 2012-05-17T10:24:37.247 回答