0

我正在通过 System.Data.SQLite 和 SubSonic 3 使用 Visual Studio 2008、C#、SQLite。我的应用程序已进入需要升级数据库架构(添加列、触发器等)然后通过 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 数据更改?

4

1 回答 1

1

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

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

于 2009-09-28T14:37:37.280 回答