Linq2SQL не может прочитать нулевое значение из поля таблицы как ENUM - PullRequest
0 голосов
/ 24 мая 2011

Вы можете прикрепить тип данных ENUM к полю sqlserver-table в Linq2SQL с помощью global :: Namespace и указать его тип данных сервера.

Вместо этого я удалил таблицу и связь с предшествующим ENUM.В Linq2Sql DataContext типу задается значение global :: Namespace, NULLable = True и соответствующий ему тип данных сервера (small int).

Почему я получаю

InvalidOperationException
The null value cannot be assigned to a member with type 
<Namespace> which is a non-nullable value type. 

.. когдазагрузка строк с нулевым значением?

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

Как насчет простого открытия сгенерированного кода и добавления '?' к соответствующей декларации? Я знаю, что вы должны были сделать нечто подобное некоторое время назад, чтобы удостовериться, что поля Guid получат значения, сгенерированные в db. (Он поддерживает это, но Linq2Sql неправильно добавил этот параметр ..)

Я полностью согласен с вами, это вообще не рекомендуется. Но если вы не видите другого решения, кроме как изменить сгенерированный код, я бы настоятельно рекомендовал документировать его где-нибудь, а не в сгенерированном коде. Я не участвовал в проекте, о котором говорил выше, и через несколько месяцев мне пришлось что-то поменять в БД на новую версию. Конечно, в то время я не думал о своих изменениях в автоматически сгенерированном коде и обновил его, что привело к довольно внушительному количеству ошибок, которые было немного грязно, поскольку я не совсем помнил, что я изменил раньше .. хорошие времена, хорошие времена! : О)

0 голосов
/ 25 мая 2011

Я пытался продвинуть комментатора, чтобы написать ответ.

Этот вопрос был решен с помощью поиска / замены внутри автоматически сгенерированного кода. Это действительно не рекомендуется, и все изменения могут быть заменены, просто нажмите Сохранить в ORM-инструменте (если он не поддерживает изменения).

В этом случае вы, вероятно, можете решить эту проблему, добавив вопросительный знак после типа данных внутри конструктора ORM. Это означает, что global::Namespace.ClassName.EnumName будет global::Namespace.ClassName.EnumName? точно так же, как т. Е. Обнуляемый int int?. Другие свойства должны, конечно, соответствовать как обычно.

Также стоит упомянуть, вернуться к выше (прочитать нулевое значение); Если тип данных сохранит нулевое значение, перечисление должно обрабатывать NULL.

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