[原创]TransactionScope事务使用问题

最近在使用.Net中的TransactionScope事务的过程中,发现个问题,当事务提交后
直接return到另一个控制器来执行数据库操作,结果数据库连接不能使用,
后来发现原来是return语句不应该放在事务中,只有当事务提交后才真正的释放连接,否则再次打开
只不过是提交事务而已,因此需要在事务using范围外执行再次的数据库操作
错误代码:

//如果没有改变分类
if (theModuleId == moduleId)
{
return this.SavePublishInfo(identifier, infoTitle, moduleId, linkManId, infoContent, picture, keyWords,displayLinkMan);
}
else//如果修改了分类,先插入到新分类表中一条记录,然后删除源记录
{
using (System.Transactions.TransactionScope tx = new System.Transactions.TransactionScope())
{
//先插入一条记录
int userid = ((UserInfo)Session["User"]).Identifier;
Information information = new Information();
try
{
business.Save<Information>(information);
try
{
//然后再按id和moduleID删除原记录
//Information info = new Information();
information.Identifier = identifier;
information.ModuleId = theModuleId;
business.Remove<Information>(information);
tx.Complete();
return this.Index();
}
catch (Exception e)
{
//回滚事务
tx.Dispose();
return baseController.Error("Error", "错误提示", "修改记录失败!错误信息:</br>" + e.Message);
}
}
catch (Exception e)
{
tx.Dispose();
return baseController.Error("Error", "错误提示", "修改记录失败!错误信息:</br>" + e.Message);
}
}

正确代码:
注意:return this.Index();

//如果没有改变分类
if (theModuleId == moduleId)
{
return this.SavePublishInfo(identifier, infoTitle, moduleId, linkManId, infoContent, picture, keyWords,displayLinkMan);
}
else//如果修改了分类,先插入到新分类表中一条记录,然后删除源记录
{
using (System.Transactions.TransactionScope tx = new System.Transactions.TransactionScope())
{
//先插入一条记录
int userid = ((UserInfo)Session["User"]).Identifier;
Information information = new Information();
try
{
business.Save<Information>(information);
try
{
//然后再按id和moduleID删除原记录
//Information info = new Information();
information.Identifier = identifier;
information.ModuleId = theModuleId;
business.Remove<Information>(information);
tx.Complete();
}
catch (Exception e)
{
//回滚事务
tx.Dispose();
return baseController.Error("Error", "错误提示", "修改记录失败!错误信息:</br>" + e.Message);
}
}
catch (Exception e)
{
tx.Dispose();
return baseController.Error("Error", "错误提示", "修改记录失败!错误信息:</br>" + e.Message);
}
}
return this.Index();
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏