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 执行后者。 :(