c# - 与 SQLite Dapper 的多个连接

标签 c# database multithreading sqlite dapper

我正在将 Dapper 与我的 SQLite 数据库结合使用。我开发了一些多线程代码,其中每个线程使用 Dapper ORM 执行一些读写操作。两个线程也可能会尝试同时写入同一个表。

我面临的困惑是,我是否必须在代码中实现一些技术来使并发读取线程安全,或者 dapper 会为我处理这个问题。

请注意,我很熟悉 SQLite 是锁定数据库文件以进行写入的那个,我在这里唯一关心的是 Dapper 及其在这种情况下的作用。

最佳答案

正如您所说,SQLite 在数据库文件级别实现锁定。

Dapper 或任何其他完整或微型 ORM 无法改变这一事实。任何 ORM 都不会为任何 RDBMS 实现线程管理或并发。线程管理是用户的责任。

换个方式思考。 ORM 如何知道如何实现线程?

是的;一些 ORM 管理一定级别的连接。但大多数情况下,它仅限于创建/打开/处置它。 ORM 不控制线程或并发。这是由用户实现的。

回复您的评论:

but yet the question still stays what dapper does in such cases as it may have some sort of retry logic to try execute the query again in case the lock is there

Dapper 不会做这样的事。 Dapper 的工作方式与 ADO.NET 完全相同(嗯……几乎)。对于任何查询部分,Dapper 在功能上与 ADO.NET 没有太大区别。

所以,回答你的评论,如果 ADO.NET 的某些提供者实现重试逻辑,它将被 Dapper 自动继承。但是,Dapper 本身并没有实现任何这样的逻辑。

如果我猜对了,ADO.NET 将抛出正确的异常 - Dapper 只会将该异常传递给您。

我希望this答案会对你有帮助。

关于c# - 与 SQLite Dapper 的多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56682542/

相关文章:

c# - 第一次机会异常(exception)是什么意思

c# - 使用 JustMock,如何测试一个方法是否被调用两次并传入不同的对象?

javascript - Node.js - Mongodb - Mongoose /无法将数组字符串传递到 $push 字段中

javascript - 如何在Web工作线程中使用javascript变量

c++ - pthread_cond_wait/signal 和 mutex 未按预期工作

c# - React 中的 FormData 对象不会在后端 C# 上转换为模型

C# DateTime 到 MySqlDateTime 转换

mysql - 导轨数据库 :migrate doesn't work after altering the database manually

php js mysql下拉选择用db值填充文本框

java - 变量更改时更新 UI