4
我正在写单元测试(技术上集成测试,因为我连接到数据库),我想在测试中的事务中创建记录,并在测试完成后回滚所有数据库修改。我的想法是,我将通过一个API调用创建记录,以便另一个API调用期望在数据库中找到。是否使用MySqlConnector for .NET完全支持TransactionScope对象?
我有下面的代码工作:
string connectionstring = "Server=MyDbServer;Database=MySchema;Uid=MyUser;Pwd=XXX;";
string sql = "Insert Into MyTable (date, Description) VALUES('2009-12-11', 'foo test description');";
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
using (MySqlConnection conn = new MySqlConnection(connectionstring))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
cmd.ExecuteNonQuery();
}
}
但是,如果我移动的TransactionScope实例只是个MySqlCommand之前发生,本次交易不会回滚,和我的测试数据被保存到数据库:
string connectionstring = "Server=MyDbServer;Database=MySchema;Uid=MyUser;Pwd=XXX;";
string sql = "Insert Into MyTable (date, Description) VALUES('2009-12-11', 'foo test description');";
using (MySqlConnection conn = new MySqlConnection(connectionstring))
{
conn.Open();
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
cmd.ExecuteNonQuery();
}
}
我在想什么?
注:MySQL服务器(诉5.0.67-0ubuntu6)托管在Linux机器上,MySqlConnecter版本6.1.3
按预期工作。谢谢! – yanigisawa 2009-12-12 16:46:03
很酷,不用担心 – RichardOD 2009-12-12 16:46:53