最近,我们将一个项目从www.example.com迁移ADO.net到EntityFramework 7。在日志文件中,我们注意到多个警告,如下所示:
decimal属性“ObjectId”是实体类型“AppointmentSchedule”上键的一部分。如果配置的精度和小数位数与数据库中的列类型不匹配,这将导致值在不符合默认精度和小数位数时被自动截断。请考虑使用其他属性作为键。或确保数据库列类型与模型配置匹配,并使用“SET NUMERIC_ROUNDABORT ON”启用小数舍入警告
做了一些研究,并按照论坛的建议,尝试了以下方法
尝试设置,
1..HasColumnType(“数字(9,0)”);
1..HasPrecision(“数字(9,0)”)
还尝试在EF模型属性上设置数据注记
[Column(TypeName = "numeric(9, 0)")]
public decimal ObjectId { get; set; }
以上都没有帮助。我们仍然看到警告。有什么建议如何避免这些警告吗?
2条答案
按热度按时间jfewjypa1#
您有一个
decimal
类型属性,并且尝试将其数据存储为9位数和0个小数位的SQL数值类型。这意味着将无法存储小数点之后的任何内容。问题是ObjectId
可能应该是int
,而不是decimal
。此外,由于最大整数大小为2147483647,因此应使SQl类型允许10位数:
uyhoqukh2#
一个解决方案是使用
DbContextOptionsBuilder.ConfigureWarnings
。检查GitHub issue和Microsoft docs的答案