#c# #linq #ef-code-first #entity-framework-6
#c# #linq #ef-code-первый #entity-framework-6
Вопрос:
Я использую Entity Framework 6 Code-First в своем проекте .NET 4.0 для связи с базой данных. Один из столбцов в таблице, с которой я работаю, — это tinyint, который допускает нулевые значения. В моей модели этот столбец определен как обнуляемый байт (байт?). Я использую LINQPad для тестирования своей модели. Когда я пытаюсь запустить оператор Linq, где я говорю Fieldname.Имеет значение, я получаю следующую ошибку:
«Указанное приведение из материализованного типа’System.Int64′ в тип’System.Int16′ недопустимо».
Может ли кто-нибудь пролить свет на то, что происходит?
Комментарии:
1. Я сталкивался с подобными случаями, когда
SqlDataReader
не всегда читаетсяtinyint
какbyte
Ответ №1:
Я думаю, что тип данных столбца внутри вашей таблицы базы данных — Int64 (BIGINT), но ваша модель данных имеет байт?. Либо вам нужно изменить тип данных базового столбца таблицы на TINYINT, либо изменить тип свойства модели данных объекта на long?.
Комментарии:
1. Для типа данных в базе данных для рассматриваемого поля установлено значение «tinyint», для него не установлено значение «bigint»
2. Теперь я понимаю, что проблема была полностью в другом поле. Спасибо за помощь.
Ответ №2:
Извлеченный урок: когда вы получаете сообщение «Указанное приведение из материализованного [type1] в [type2] недопустимо», проверьте ВСЕ свои поля, а не только те, которые вы пытаетесь запросить.
Моя ошибка заключалась в предположении, что ошибка была связана с полем, в котором было значение байта с нулевым значением. Оказывается, было еще одно поле, которое я определил как «int», но тип SQL был «bigint», отсюда и ошибка.
Спасибо всем за ваше терпение, вашу помощь и ваше время.