Таблица EF для иерархии (TPH) не сохраняется, потому что не удается вставить значение null в столбец дискриминатора

У меня есть таблица, используемая для умножения типа категории, и она содержит столбец дискриминатора с именем ClassName, чтобы указать тип объекта для загрузки. Столбец ClassName не допускает значения NULL со значением по умолчанию "Категория".

Моя проблема в том, что при сохранении нового элемента я получаю сообщение об ошибке: «Не удается вставить значение null в столбец ClassName», таблица Категория.

Я подумал, что ef установит базу значений ClassName для нового класса объекта. Как я могу сохранить свой объект с правильным значением ClassName?


person freddoo    schedule 26.09.2011    source источник
comment
Да, EF должна заботиться о значениях столбца Discriminator в сопоставлении TPH. Я думаю, вы должны показать свой код, потому что, вероятно, что-то не так в ваших сущностях или сопоставлениях. Вы настроили, например, что имя столбца дискриминатора ClassName (что не по умолчанию)?   -  person Slauma    schedule 27.09.2011
comment
Я использую пользовательский интерфейс, чтобы установить свой дискриминатор в edmx, щелкните правой кнопкой мыши таблицу, выберите сопоставление таблиц, в Maps to Category i установите, когда ClassName = CategoryRoot, он отлично работает и создаю мой объект CategoryRoot, но из моей категории, когда я добавляю новую категорию для значения classname установлено значение null, я хочу установить значение Category. Поищу как настроить дискриминатор   -  person freddoo    schedule 27.09.2011


Ответы (2)


Я изменил структуру своей базы данных, чтобы принимать значение null. EF установит значение null, если имя объекта совпадает с именем таблицы, и установит имя дискретизатора для производных классов.

person freddoo    schedule 21.11.2011

Это старый вопрос, но я встретил его только сегодня. Сначала в коде .net 4.0 я не встречал «столбца отказа от ответственности», но при понижении до net 3.5 это утомляло меня на день. Это мое решение

Измените столбец в базе данных на ALLOW NULL (используя alter table) и обновите файл edmx, чтобы он обновил изменение (разрешить null)

person Andiana    schedule 25.02.2015