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

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

Таблица содержит битовый столбец, который не принимает значение NULL. Столбец имеет значение по умолчанию: ((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 Ответ

1 голос
/ 04 мая 2011

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

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

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

...