如何避免"不支持嵌套事务".错误?

poy*_*poy 9 .net c# mysql entity-framework

我正在使用EF6MySql数据库进行一些非常简单的集成.

Nested transactions are not supported.错误发生后,我做到以下几点:

  1. 尝试添加key已存在的...导致错误:Duplicate entry 'asdf' for key 'UserName_UNIQUE'
  2. 之后尝试添加任何内容......导致错误: Nested transactions are not supported.

我想我不确定Nested这两个问题会是什么......我做错了什么:

对于一些代码

using (var db = C2SCore.BuildDatabaseContext())
{
  db.Users.Add(new UserProfile { UserName = UserName, Password = Password });
  db.SaveChanges(); // <- Errors occur here...
}
Run Code Online (Sandbox Code Playgroud)

每个UserProfile我添加的代码片段(就像我上面描述的流程所暗示的那样).

sta*_*max 6

我有完全一样的问题.通过将其包装到TransactionScope中尝试以下解决方法:

using System.Transactions; // Add assembly in references

using (var db = C2SCore.BuildDatabaseContext())
{
  using (var tran = new TransactionScope())
  {
    db.Users.Add(new UserProfile { UserName = UserName, Password = Password });
    db.SaveChanges(); // <- Should work now after first exception
    tran.Complete();
  }
}

<package id="MySql.Data" version="6.8.3" targetFramework="net45" />
<package id="MySql.Data.Entities" version="6.8.3.0" targetFramework="net45" />
Run Code Online (Sandbox Code Playgroud)

但是,他们知道它:http://bugs.mysql.com/bug.php?id = 71502


rae*_*ae1 0

该错误表明,一旦出现第一个错误,您需要处理该事务,然后才能继续其他操作。我建议try ... catch在区块中放置并处置当前交易finally

您甚至可能必须处理当前的Connection,但我会先尝试处理交易。