EF BulkInsert不支持SQLProviderServices安装

时间:2019-06-24 07:55:10

标签: c# entity-framework bulkinsert

可能的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)进行相同的概念操作时,该设置就不适用。

有解决这个问题的明智方法吗?

1 个答案:

答案 0 :(得分:0)

事实证明,这很可能是底层.NET Framework类实现不当的结果。

按此处所述:Sql Bulk Copy Truncating Decimal底层SqlBulkCopy类不允许舍入小数,即使原则上可以这样做。

因此,任何使用SqlBulkCopy的BulkInsert库都会遇到此问题。


我的解决方案是将自动属性替换为背景字段和舍入设置器。 如果您关心舍入策略是使用.ToEven()还是.AwayFromZero(),这还具有允许控制舍入策略的优点。请注意,默认情况下,C#会执行前者,而SQL会执行后者。 :(