Код EF6 — ошибка приведения первого обнуляемого байта?

#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», отсюда и ошибка.

Спасибо всем за ваше терпение, вашу помощь и ваше время.