EF BulkInsert 不支持 SQLProviderServices 设置

EF BulkInsert doesn't honour SQLProviderServices setup

可能的 XY 问题:我需要我的代码在写入数据库时​​不截断小数位。 看这里:https://entityframework.net/knowledge-base/26392489/entity-framework-code-first-truncating-my-decimals

我已成功配置我的 EF dbContext,以便它将完整的小数发送到 SQL 服务器,以进行适当的舍入。

即我设置了 SqlProviderServices.TruncateDecimalsToScale = false;

运行 使用正常 EF "write this object to its Dataset and .Savechanges()" 的测试工作正常。

但是当我对 BulkInsert 库 (link) 执行相同的概念操作时,它不遵守该设置。

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

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

根据此处:Sql Bulk Copy Truncating Decimal 基础 SqlBulkCopy class 不允许选择四舍五入小数,即使原则上可以这样做。

所以任何使用 SqlBulkCopy 的 BulkInsert 库都会遇到这个问题。


我的解决方案是用支持字段和舍入 setter 替换 auto-property。 如果您关心它是使用 .ToEven() 还是 .AwayFromZero(),这也有允许控制舍入策略的优点。请注意,默认情况下,C# 执行前者,但 SQL 执行后者。 :(