устранение неполадок sql в структуру сущности сопоставления объектов - PullRequest
0 голосов
/ 11 июля 2020

Мой вопрос:

Как отлаживать процесс сопоставления из записей, которые возвращаются с SQL сервера как он сопоставляется с объектом класса, так что я могу точно сказать, какое свойство класса не работает?

Фон:

Получение ошибки при возврате данных с SQL Сервера как он пытается сопоставить данные sql с объектом. Я использую Entity Framework 6 и проекцию Automapper для того, что это стоит.

Я получаю ошибку The cast to value type 'System.Int32' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type..

Я знаю, что это означает один из столбцов из SQL возвращает NULL, который он пытается сопоставить со свойством класса, которое в int и не допускает значения NULL . Но как вы можете определить , какое свойство является проблемой ?

Запрос, который создает EF, является массивным (1250 строк) с множеством общих c столбцов, таких как C1, C2 и др. c. Кажется, что порядок столбцов, для именованных столбцов, которые он возвращает, находится в алфавитном порядке, вроде ... поэтому я взял все свойства класса и отсортировал их в альфа-порядке, чтобы увидеть, соответствуют ли они порядку столбцов .. . они вроде как делают, но не на 100% ... плюс класс наследуется от другого ... не уверен, включает ли он те, которые находятся в альфа-сортировке или в конце, et c.

В любом случае , это была моя попытка выяснить, какое свойство является проблемой. В запросе есть несколько полей, которые имеют значение NULL, но есть много полей и много строк и int, допускающих значение NULL, et c, поэтому они могут быть действительными. Даже пытаясь выяснить, возвращает ли столбец C1 значение null, какое фактическое свойство, которое он пытается сопоставить, практически невозможно с этим очень большим запросом и классом с более чем 80 полями.

Есть ли способ сломать вниз по sql отображению объектов, чтобы точно знать, в каком свойстве проблема?

1 Ответ

1 голос
/ 11 июля 2020

Я думаю, ваша проблема может быть примерно такой.

Модель вашей БД: public int property { get; set; }

Возможно, вы знаете, что int - это структура и ее значение не может быть нулевым. Когда mapper сериализует данные, он выдает исключение, потому что этот столбец в БД, вероятно, имеет значение NULL. 1010 * Возможно, вы могли бы использовать SQL Profiler с SQL сервера и проверить.

...