gpt4 book ai didi

c# - SQLite Dapper 的多个连接

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:24 26 4
gpt4 key购买 nike

我在 SQLite 数据库中使用 Dapper。我开发了一些多线程代码,其中每个线程使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com