Database.ExecuteSqlCommandAsync autocommit transaction?

时间:2017-01-24 16:00:49

标签: c# entity-framework rawsql

我有疑问,_context.Database.ExecuteSqlCommandAsync方法是否自动提交交易。

我的代码如下所示:

using (DatabaseContext _db = new DatabaseContext())
{
     using(var _transaction = _db.Database.BeginTransaction())
     {
          try
          {
              await _db.Database.ExecuteSqlCommandAsync(query, paramsList);
              _transaction.Commit();
          }
          catch(Exception ex)
          {
              _transaction.Rollback();
              throw;
          }
     }
}

我认为该方法不会自动提交事务,因此我决定手动提交。

这是一个好习惯吗?或者没有必要这样做?

2 个答案:

答案 0 :(得分:1)

不,您不需要提交ExecuteSqlCommandAsync,但由于这会直接写入数据库,因此EF跟踪的实体可能会过时。

要解决这个问题,只需处理并重新制作上下文:

using (DatabaseContext _db = new DatabaseContext())
{
   await _db.Database.ExecuteSqlCommandAsync(query, paramsList);
}
using (DatabaseContext _db = new DatabaseContext())
{
   var itemsJustInserted = _db.Items.ToList(); //should have your modified items
}

答案 1 :(得分:0)

不,您不需要。

ExecuteSqlCommandAsync(String,CancellationToken,Object [])

备注 如果没有现有的本地事务,将使用新事务执行命令。

https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.database.executesqlcommandasync?view=entity-framework-6.2.0

相关问题