EF BulkInsert не соблюдает настройку SQLProviderServices - PullRequest
1 голос
/ 24 июня 2019

Возможная проблема XY: мне нужно, чтобы мой код не обрезал десятичные дроби при записи в базу данных.См. Здесь: https://entityframework.net/knowledge-base/26392489/entity-framework-code-first-truncating-my-decimals

Я успешно настроил свой EF dbContext так, чтобы он отправлял полный десятичный код в SQL Server для округления соответствующим образом.

т.е. я установил SqlProviderServices.TruncateDecimalsToScale = false;

Запуск теста с обычным EF «запишите этот объект в его набор данных, и .Savechanges()» работает нормально.

Но когда я делаю ту же концептуальную операцию с библиотекой BulkInsert ( ссылка ) это не соблюдает настройку.

Есть ли вменяемый способ исправить это?

1 Ответ

0 голосов
/ 28 июня 2019

Оказывается, что это, вероятно, результат того, что базовый класс .NET Framework плохо реализован.

Как указано здесь: Sql Bulk Copy Truncating Decimal базовый SqlBulkCopy классне допускает опцию округления десятичных дробей, хотя в принципе это возможно.

Так что любая библиотека BulkInsert, использующая SqlBulkCopy, пострадает от этой проблемы.


Мое решение заключалось в том, чтобызамените авто-свойство полем поддержки и установщиком округления.Это также имеет то преимущество, что позволяет контролировать стратегию округления, если вы заботитесь о том, использует ли она .ToEven() или .AwayFromZero().Обратите внимание, что C # делает первое по умолчанию, а SQL - второе.(

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...