在事务中通过SubSonic 3修改SQLite数据库模式和数据

时间:2009-09-25 18:44:00

标签: c# sqlite subsonic subsonic3 system.data.sqlite

我正在使用Visual Studio 2008,C#,SQLite通过System.Data.SQLite和SubSonic 3.我的应用程序已进入一个状态,我需要升级数据库模式(添加列,触发器等)然后添加新的通过SubSonic生成的ActiveRecord对象记录 - 所有这些都在单个事务的范围内,以便可以很好地回滚任何故障。

理想情况下,这是我希望做的事情:

Begin Transaction
try
  Update Schema to latest version
  Use SubSonic objects to add new records/modify existing
  Commit Transaction
catch
  Rollback Transaction

不幸的是,这不起作用。所有架构更改当前都是通过SubSonic.Query.CodingHorror,它似乎不尊重事务。有没有办法在单个事务的范围内执行架构更改和SubSonic数据更改?

1 个答案:

答案 0 :(得分:1)

我想我找到了我的问题的答案:对所有操作使用相同的数据库连接,并在该数据库连接上使用事务。因为我没有告诉SubSonic如何为我处理所有数据库连接 - 它使用默认方法,每个查找一个连接或创建对象或CodingHorror。由于事务不能跨越数据库连接,我看到的行为是完全可以预期的。

一旦我创建了自己的数据库连接并对其进行了查找,创建和CodingHorror架构更改,所有事务处理都开始正常工作。