Entity Framework 4.1 и SQLite

Я использую базу данных SQLite и Entity Framework 4.1 Code First.

Произошла следующая ошибка, когда db.SaveChanges позвонил System.Data.EntityException: The underlying provider failed on Open. ---> System.Data.SQLite.SQLiteException: The database file is locked

Мой код:

using (var db = new Dal.Database())
{
    var newObj = db.Sheet.FirstOrDefault(e => e.SheetId == SheetId);
    if (newObj == null)
        newObj = new Dal.Sheet();

    newObj.SheetTypeCode = SheetTypeCode;
    newObj.SheetCount = SheetCount;

    db.Sheet.Add(newObj);
    db.SaveChanges();
}

Пожалуйста помогите. Спасибо


person user902271    schedule 15.12.2011    source источник
comment
Какую версию C# вы используете?   -  person M.Babcock    schedule 15.12.2011


Ответы (1)


SQLite - это один файл базы данных правильно? Есть ли у приложения разрешение на доступ к этому файлу? А файл точно не только для чтения?

Итак, ошибка возникает при SaveChanges, значит, ваш код успешно считывает данные из вашей базы данных, но не записывает?

У них может быть ответ для вас,

Entity Framework с исключением SQLite: сбой базового поставщика при фиксации

"Файл базы данных заблокирован" с помощью System.Data.SQLite< /а>

Попробуйте изолировать ошибку, что произойдет, если вы попытаетесь вставить новые данные в свою базу данных без предварительного чтения?

Есть ли внутреннее исключение?

person peter    schedule 15.12.2011
comment
Я наткнулся на некоторые другие ответы stackoverflow о проблемах с транзакциями, но вы, похоже, не используете транзакцию? EF, вероятно, использует транзакцию, но как это влияет на это? - person peter; 15.12.2011
comment
[Transactional(TransactionalTypes.TransactionScope)] защищенное переопределение void DataPortal_Insert() { using (var db = new Dal.Database()) { var newObj = db.Sheet.FirstOrDefault(e => e.SheetId == SheetId); if (newObj == null) newObj = new Dal.Sheet(); newObj.SheetTypeCode = SheetTypeCode; newObj.SheetCount = Количество листов; БД.Лист.Добавить (новыйОбъект); БД.СохранитьИзменения(); }} - person user902271; 15.12.2011
comment
что делает декоратор транзакционного метода? - person C. Tewalt; 24.09.2014