Несколько подключений к SQLite Dapper - PullRequest
2 голосов
/ 20 июня 2019

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

Путаница, с которой я сталкиваюсь, заключается в том, что мне нужно реализовать какую-то технику в моем коде, чтобы сделать поток параллельных операций чтения безопасным, или программа dapper справится с этим для меня.

Заметьте, я знаком с тем, что SQLite блокирует db-файл для записи, и моя единственная проблема здесь - в Dapper и что он делает в таком сценарии.

1 Ответ

1 голос
/ 21 июня 2019

Как вы сказали, SQLite реализует блокировку на уровне файла БД.

Dapper или любой другой полный или микро ORM не может изменить этот факт. Ни один ORM не будет реализовывать управление потоками или параллелизм для любой СУБД. За управление потоками отвечает пользователь.

Думай иначе. Как ORM узнает, как реализовать многопоточность?

Да; некоторые ORM управляют соединением до определенного уровня. Но в основном это ограничивается только созданием / открытием / утилизацией. ORM не контролируют потоки или параллелизм. Это то, что должно быть реализовано пользователем.

Ответ на ваш комментарий:

но все же остается вопрос, что делает dapper в таких случаях, поскольку у него может быть какая-то логика повторных попыток выполнить запрос еще раз в случае блокировки

Дэппер не делает ничего подобного. Dapper работает точно (ну ... почти) как ADO.NET. Для любой запрашиваемой части Dapper не сильно отличается от ADO.NET.

Итак, чтобы ответить на ваш комментарий, если какой-либо поставщик ADO.NET реализует логику повторных попыток, он будет унаследован Dapper автоматически. Но Даппер сам по себе не реализует такую ​​логику.

Если я правильно угадаю, ADO.NET выдаст правильное исключение - Даппер просто передаст вам это исключение.

Надеюсь этот ответ поможет вам.

...