Довольно простое срабатывание при попытке получить записи из SQLite - PullRequest
1 голос
/ 28 января 2011
System.InvalidCastException = "Specified cast is not valid."

Это ошибка, которую я получаю.

Мой код достаточно прост:

public Staff FindStaff(int id)
{
    try
    {
        return db.Staffs.SingleOrDefault(c => c.ID == id);
    }
    catch (Exception e)
    {
        Debug.WriteLine(e.InnerException);
        throw;
    }            
}

Я использовал точку останова, чтобы проверить, какое значение имеет параметр id при выполнении, и он имеет числовое значение существующей записи. Например, 4.

Ошибка срабатывает в операторе возврата.

Что странно, у меня точно такой же тип кода для другой сущности в моем проекте, и он отлично работает. Что может быть причиной этой ошибки?

Вот TSQL, который я использовал для создания таблиц. Персонал - тот, кто вызывает ошибку, Студент работает на 100% нормально.

create table Student
(
    ID integer primary key autoincrement,
    ...other fields...
);

create table Staff
(
    ID integer primary key autoincrement,   
    IDStaffType integer references StaffType(ID),
    ...other fields...
);

Как видите, оба поля идентификатора являются целыми числами. Почему возникает исключение преобразования?

1 Ответ

0 голосов
/ 30 января 2011

В SQLite "integer" - это 64-разрядное целое число, которое long в C #.

Я подозреваю, что это не проблема, хотя. SQLite не поддерживает типы данных (за исключением integer primary key столбцов), поэтому вполне возможно, что у вас есть запись, в которой есть, скажем, строка, хранящаяся в целочисленном столбце. Это объясняет странное поведение, когда оно иногда работает, а иногда нет (только запись проблемы может вызвать ошибки).

После запуска этого сценария я изменил свой файл edmx, чтобы всегда обрабатывать данные SQLite как строки, например, DefiningQuery из

SELECT RowId,
CAST ([data1] AS TEXT) AS [data1],
CAST ([data2] AS TEXT) AS [data2],
CAST ([data3] AS TEXT) AS [data3]
FROM table1

с соответствующими вставками / обновлением / удалением «хранимых процедур», определенных в StorageModels.

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