2009-09-25 28 views
0

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

理想的情况下,这是有点什么,我希望做的:

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

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

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

相关问题