Получение ошибки System.IO.IOException: «Процесс не может получить доступ к файлу» - PullRequest
0 голосов
/ 07 марта 2020

Я разрабатываю небольшое приложение с многопоточностью. Я решил использовать LiteDB для хранения данных. Я смог прочитать, обновить, удалить и вставить в мою базу данных успешно. Однако при попытке добавить другой поток, который также будет использовать ту же базу данных и ту же таблицу, выдается исключение, в котором говорится, что

System.IO.IOException: «Процесс не может получить доступ к файлу» C: \ Users \ Soyuz \ TestApp \ bin \ Debug \ Soyuz.db ', поскольку он используется другим процессом.'.

Вот как я установил соединение с моей базой данных:

using (var db = new LiteDatabase(@"Soyuz.db")) { }

Здесь в документе говорится, что LiteDB предлагает 2 типа соединений. Я полагаю, что я должен использовать общий, так как мне придется обращаться к одной и той же базе данных из разных потоков.

https://www.litedb.org/docs/connection-string/

но когда я попробовал этот код;

using (var db = new LiteDatabase(@"Soyuz.db; Connection=shared")) { }

или

using (var db = new LiteDatabase(@"Soyuz.db; Mode=Shared")) { }

на этот раз выдает еще одно исключение, сообщающее, что

System.ArgumentException: «EngineSettings должен иметь Filename или DataStream в качестве источника данных '

Может ли кто-нибудь, кто имеет опыт работы с LiteDB, помочь мне с этим, пожалуйста?

1 Ответ

2 голосов
/ 07 марта 2020

Вы пропустили Filename, используйте это для v5:

using (var db = new LiteDatabase(@"Filename=Soyuz.db; Connection=shared")) { }

или это для v4

using (var db = new LiteDatabase(@"Filename=Soyuz.db; Mode=Shared")) { }
...