mvc4 在事务中使用WebSecurity时出现MSDTC错误的解决方法

2014-11-05 10:52 ·Ab叔 1816 10 <- 点击左侧的数字“攒”一个吧

mvc4开发的时候需要用到事务,事务中使用WebSecurity.CurrentUserName获取用户名的时候出现“MSDTC on server  is unavailable”。

下面介绍此问题的出现原因及解决方案。

说明:我是在使用Asp.net MVC4的EntityFramework5 CodeFirst开发的程序时遇到此类问题。

首先看一下有问题的代码

using (TransactionScope ts = new TransactionScope())
{
	//数据插入操作
	db.Commit();
	int sessionUid = WebSecurity.CurrentUserId; //此时出现异常“MSDTC on server  is unavailable”
	ts.Complete();
}

这个异常的起因是websecurity使用自己的数据库连接,我的使用另一个连接,虽然我已经配置simplemembership使用相同的DbContext类作为我的库,但问题是它会创建一个新的实例中的DbContext的,这就会与事务using起冲突。

找到问题了,那就有两种方法去解决:

1:不用事务

2:将int sessionUid = WebSecurity.CurrentUserId 提前到事务之前