Использование значений DB-Default для несопоставленных битовых столбцов в платформе сущностей 4 (сначала база данных)

Я пытаюсь отобразить два конкретных типа сущностей и абстрактный базовый тип в одну и ту же таблицу базы данных.

Таблица содержит битовый столбец, который не принимает ноль. Столбец имеет значение по умолчанию: ((0)).

Только один из двух конкретных типов сущностей (т. Е. Конкретный тип 1) должен использовать значение столбца (для другого (т. Е. Конкретного типа 2) оно всегда ложно).

Я попытался добавить свойство, сопоставленное этому столбцу, только с тем типом объекта, который требует его, и

Когда я вызываю SaveChanges, я получаю UpdateException со следующим сообщением о самом внутреннем исключении:
"Столбец не может содержать нулевые значения. [Имя столбца = MY_BIT_COLUMN, Имя таблицы = MY_TABLE ]"

Я уже отредактировал раздел SSDL в EDMX и изменил:

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" />

чтобы:

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" DefaultValue="false" />

(Без этого изменения сопоставление не удалось - не запустится)

Есть ли способ обойти это, не добавляя свойство, сопоставленное этому столбцу, со вторым конкретным типом сущности или перемещая его в базовый тип?

Добавление свойства как защищенного к бетону типа 2 работает, но я бы предпочел более элегантный обходной путь.

1 ответ

Решение

Если ваш обходной путь не работает (я немного удивлен, но сейчас мне уже поздно его тестировать), тогда единственный другой обходной путь - это изменение вашего наследования с TPH на TPT или TPC. Проблема, очевидно, состоит в том, что TPH требует, чтобы все столбцы в производных типах были обнуляемыми.

Другой обходной путь - сделать ваш столбец членом родительской сущности, а в производной сущности использовать пользовательский конструктор, который всегда будет устанавливать для него значение false.

Последний обходной путь - сделать ваш столбец обнуляемым и применить проверку в вашей бизнес-логике для первого объекта.

Другие вопросы по тегам