【问题标题】:Linq2db, SQLite, connection poolLinq2db、SQLite、连接池
【发布时间】:2019-08-04 17:22:45
【问题描述】:

我不能使用 SQLite 的内置连接池。它不适用于 WPF 应用程序。 SQLiteConnectionPool 类的源码中有说明。

我想使用 Linq2DB DataConnection 类为 SQLite 连接实现我自己的连接池。实现这一点的最佳方法是什么?

我可以看到 DataContext 没有接受 DataConnection 的构造函数。是否应该推出我自己的 IDataContext 实现,它在内部使用 ConnectionPool 来获取连接?

【问题讨论】:

    标签: system.data.sqlite linq2db


    【解决方案1】:

    如果你想控制连接的创建,我建议继承SQLiteDataProvider 并覆盖CreateConnectionInternal 方法来为新的连接创建提供你自己的逻辑。 这将涵盖 linq2db 需要创建连接的所有情况,而不仅仅是 DataConnection 或 DataContext 调用。

    PS:不确定您的意思是哪个语句,因为我在 SQLiteConnectionPool 的代码中没有看到任何 WPF 或 cannot 注释。

    【讨论】:

    • 它说: /// /// 这个类中的默认方法实现(即 SQLiteConnectionPool)不应该被 /// 使用 COM 的应用程序使用(直接或间接) ) 由于 /// 在某些 COM /// 对象的最终确定期间可能发生的死锁。 /// WPF是基于COM的
    • 您从哪里得知 WPF 是基于 COM 的?你有参考吗?
    • 好的,我看到 WPF 依赖于 DirectX 的优化、非托管接口,这是一个基于 COM 的 API。但是这些接口由 WPF 渲染系统使用,并且应该与托管线程完全分开,如果您将使用连接池来执行 DB 工作。除非您对 UI 进行了非常奇怪或不正确的调用,否则任何 COM 对象的最终确定都不应与 sqlite 连接纠缠在一起。您是在 COM 对象上建立显式异步回调,还是在与数据库连接相同的线程上建立依赖关系?
    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2013-08-20
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多