EF Code Сначала изменить тип данных bool?закипать и инт?к инт - PullRequest
0 голосов
/ 28 февраля 2019

У нас есть приложение, в котором мы используем автоматическую миграцию данных, и потеря данных не допускается. В соответствии с политикой компании я не могу изменять эти настройки.

У нас также есть несколько столбцов, допускающих обнуление в нескольких таблицах bool?тип и инт?type.

Я только что обнаружил сегодня, что существует фрагмент кода, который просматривает существующие записи в базе данных и устанавливает значения столбцов, допускающих значение NULL, равными их значениям по умолчанию (false и 0 соответственно).Текущее поведение замедляет работу приложения.Я хочу заставить базу данных / EF устанавливать значения по умолчанию и не разрешать пустые значения.

До сих пор я безуспешно пытался сделать следующее:

  1. Прямое изменение типа от bool?закипать и инт?к инт.Он генерирует исключение потери данных.
  2. Добавление атрибутов [Required] и [DefaultValue (false)] через свойство, допускающее значение NULL.То же самое, исключение потери данных.
  3. Изменение .IsOptional () на .IsRequired () в классе отображения также вызвало то же исключение.

То, что я по сути хочу воспроизвести в Code FirstEF - это следующее утверждение MySQL:

ALTER TABLE orders 
CHANGE COLUMN ScaleToFit ScaleToFit TINYINT(1) NOT NULL DEFAULT 0;

Существуют ли элегантные решения проблемы в отношении политики компании?Спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

Это может быть мой первый непрограммный ответ.

Я искренне надеюсь, что не существует элегантного решения - и вообще никакого решения - для достижения этого посредством миграции.Это означало бы утечку в обнаружении потери данных, что было бы плохой новостью.Это считается потерей данных, потому что значение null может также содержать информацию, то есть преднамеренное «не знаю».В случае логического: три состояния превращается в два состояния.Это не так в вашем случае, следовательно, это процесс исправления, но это не меняет правила.

В соответствии с политикой компании я не могу изменять эти настройки.

Политики служат цели, но почти всегда превращаются в цели.Возможно, потому что политики легче определить, применять и проверять, чем их основную цель.Но, как в законе Гудхарта ...

Когда мера становится целью, она перестает быть хорошей мерой

... каждыйполитика может однажды победить свою цель и перестать быть хорошей политикой.Способность распознавать это и гибко использовать политики, когда это необходимо, является похвальной особенностью организаций.

Я хочу сказать следующее: предложить временное одноразовое приостановление действия этой политики, чтобы обеспечить миграцию, которая только применяет эти необнуляемые поля со значениями по умолчанию. Если нулевые значения действительно бессмысленны и фактически должны были быть не нулевыми с самого начала, это самый простой способ добраться туда, куда вы хотите.

...