在实体框架中,如果将数据库中十进制列的精度设置为10,2,并在EDMX中更新它,它会自动将任何小数截断为2位小数,对吗?
如果我给它一个带有一堆小数位的数字,而不是默默地截断它,我希望它在我脸上爆炸,因为这意味着我没有正确验证我的数据。
我可以设置此设置吗?或者我将不得不附加到savingchanges方法并做一些反思?
通过示例澄清:
如果我有一个名为Invoice的表,其中包含一个名为Amount的列。在我的数据库中,这是一个十进制(10,2)列,这反映在EDMX中,我的实体表示它的精度为10,标度为2.
然后在我的代码中,让我们说用户创建一个发票,他们输入10.23456作为金额,我忘了为此添加某种客户端验证,所以金额被发送到服务器,我的控制器然后保存发票金额为10.23456。实体框架会将此截断为10.23并完成它。
我想要的是: 如果我尝试以10.23456作为金额保存发票,EF会发现我的实际价值比我的实体允许的更准确,并抛出异常。所以这样我就无法正确地验证输入。
答案 0 :(得分:0)
您无法在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; }
OR
[StringLength(255, MinimumLength = 0, ErrorMessage = "ERROR MESSAGE")]
public string FriendlyName { get; set; }