C# 但事务已中止错误
我使用EF6,采用代码优先的方法。我有一个案例,我试图在两个不同的数据库上应用相同的事务。请在下面找到我的代码作为参考C# 但事务已中止错误,c#,transactions,entity-framework-6,transactionscope,distributed-transactions,C#,Transactions,Entity Framework 6,Transactionscope,Distributed Transactions,我使用EF6,采用代码优先的方法。我有一个案例,我试图在两个不同的数据库上应用相同的事务。请在下面找到我的代码作为参考 using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, TimeSpan.FromSeconds(6000))) { using (var dbContext = new MyDbContext()) {
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, TimeSpan.FromSeconds(6000)))
{
using (var dbContext = new MyDbContext())
{
try
{
/*
* some operations on dbContext
*
*/
using (IDbConnection conn = new SqlConnection(NewConnectionString))
{
string query = " ALTER TABLE [dbo].[TableName]...........";
conn.Execute(query); // I am using a dapper to call this execute query
}
}
catch (Exception ex)
{
throw;
}
}
scope.Complete();
}
try块中的第一部分使用linq对表执行一些常规操作。
在使用IDbConnection的第二部分中,我正在另一个数据库上使用dapper执行一些查询。我可以毫无错误地执行所有操作,但在完成作用域后我会出错。事务已中止时抛出错误。每当我跳过短小精悍的执行部分时,一切都很好。我已经检查了许多解决方案,并试图为dapper部分设置单独的事务,但没有任何效果。我的要求是把所有的报表放在一个事务下。可能吗?如何?是否存在内部异常?@Crowcoder内部异常为空。此代码尝试启动分布式事务协调器(MS-DTC),但可能会失败。两个数据库服务器都应该能够运行MS-DTC。在事务作用域中使用不同的连接字符串时,MS-DTC始终是必需的。