我可以在单个 SQLite 连接上创建多个写入事务吗?
Can I create multiple write transactions on single SQLite connection?
我不应该有多个连接来访问 SQLite 数据库,因为在数据库中写入时会出现类似 Database is locked
的错误。所以我创建了多个事务。但是,似乎每次都是 returns 相同的交易。
每个连接只能有一个事务。
没有可以同时获得多个写入事务的机制。
使用 NHibernate 可以同时进行多个写入事务。诀窍是将隔离级别设置为 ReadCommitted。在代码 here 中可以看到在 SQLite 中设置该值的能力。但是,我应该提一下,我对这种行为不是很满意。只要第一个会话在第二个会话关闭之前不读取 任何数据,两个具有活动事务的会话就可以正常工作。
我在此处突出显示 read 是因为我可以毫无问题地将新对象保存到数据库,但是当第二个会话在事务上调用 Commit() 时,调用 Get() 或 QueryOvery() 会导致异常。我看到的问题是 SQLiteConnection 被处置和处置未处置连接的事务检查。这可能只是 NHibernate 的问题,因为我还没有测试过任何更通用的东西。
我不应该有多个连接来访问 SQLite 数据库,因为在数据库中写入时会出现类似 Database is locked
的错误。所以我创建了多个事务。但是,似乎每次都是 returns 相同的交易。
每个连接只能有一个事务。
没有可以同时获得多个写入事务的机制。
使用 NHibernate 可以同时进行多个写入事务。诀窍是将隔离级别设置为 ReadCommitted。在代码 here 中可以看到在 SQLite 中设置该值的能力。但是,我应该提一下,我对这种行为不是很满意。只要第一个会话在第二个会话关闭之前不读取 任何数据,两个具有活动事务的会话就可以正常工作。
我在此处突出显示 read 是因为我可以毫无问题地将新对象保存到数据库,但是当第二个会话在事务上调用 Commit() 时,调用 Get() 或 QueryOvery() 会导致异常。我看到的问题是 SQLiteConnection 被处置和处置未处置连接的事务检查。这可能只是 NHibernate 的问题,因为我还没有测试过任何更通用的东西。