可能的XY问题:写入数据库时,我需要我的代码不要截断小数。 看到这里:https://entityframework.net/knowledge-base/26392489/entity-framework-code-first-truncating-my-decimals
我已经成功配置了我的EF dbContext,以便它将完整的十进制数发送到SQL Server,以进行适当的四舍五入。
即我设置了SqlProviderServices.TruncateDecimalsToScale = false;
使用普通的EF运行测试“将该对象写入其数据集并.Savechanges()
”可以正常工作。
但是,当我对BulkInsert库(link)进行相同的概念操作时,该设置就不适用。
有解决这个问题的明智方法吗?
答案 0 :(得分:0)
事实证明,这很可能是底层.NET Framework类实现不当的结果。
按此处所述:Sql Bulk Copy Truncating Decimal底层SqlBulkCopy
类不允许舍入小数,即使原则上可以这样做。
因此,任何使用SqlBulkCopy的BulkInsert库都会遇到此问题。
我的解决方案是将自动属性替换为背景字段和舍入设置器。
如果您关心舍入策略是使用.ToEven()
还是.AwayFromZero()
,这还具有允许控制舍入策略的优点。请注意,默认情况下,C#会执行前者,而SQL会执行后者。 :(