Ошибка чтения LINQ to SQL - как определить, в каком столбце произошел сбой? - PullRequest
0 голосов
/ 17 сентября 2009

У меня есть класс LINQ to SQL, который я читаю в список.

При чтении из таблицы я получаю сообщение об ошибке «Длина строки должна быть ровно 1 символ».

Я просмотрел определение таблицы для этого файла и файл .dbml для этой таблицы, и в нем нет поля, длина которого ровно 1 символ.

Таблица (устаревшая таблица) имеет много полей. Как я могу легко определить, какое поле вызывает проблему?

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 сентября 2009

Я нашел разумный (хотя и не автоматизированный) подход - выполнить двоичный поиск по столбцам, удалив половину столбцов из файла LINQ .dbml (это можно сделать с помощью щелчков мыши и shift для множественного выбора), а затем запустив программу.

Как только число записей достигнет примерно 5, выполните линейный поиск (из-за накладных расходов, связанных с вставкой с кликом и копированием для новой таблицы, издержки двоичного поиска означают, что линейный поиск лучше для размера N. Фактическое число зависит от вашего приложения).

Это сузило его до проблемного столбца примерно за 10 минут.

1 голос
/ 17 сентября 2009

К сожалению, ошибка не содержит ничего полезного, чтобы указать, какой столбец не удалось вставить. Лучшее решение, которое у меня есть, - это включить профилирование на вашем блоке SQL. Затем вы можете проверить SQL, который фактически был отправлен на сервер. С этим, и большим количеством проб и ошибок, вы, вероятно, сможете найти столбец, который выдает ошибку.

Возможно, вы захотите взглянуть на декорацию вашего класса с помощью System.ComponentModel.DataAnnotations (и связанных с ним атрибутов) и проверку того, что SQL пройдет до того, как он будет отправлен на сервер. Хлопот? Да. Но используемые коды ошибок и очень, очень ценны.

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