Database.ExecuteSqlCommandAsync 自动提交事务?
Database.ExecuteSqlCommandAsync autocommit transaction?
我有疑问,_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;
}
}
}
我假设该方法不会自动提交事务,所以我决定手动提交它。
这是一个好习惯吗?还是没有必要这样做?
不,您不需要提交 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
}
不,你不需要..
ExecuteSqlCommandAsync(字符串、CancellationToken、对象[])
备注
如果没有现有的本地事务,将使用一个新的事务来执行命令。
我有疑问,_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;
}
}
}
我假设该方法不会自动提交事务,所以我决定手动提交它。
这是一个好习惯吗?还是没有必要这样做?
不,您不需要提交 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
}
不,你不需要..
ExecuteSqlCommandAsync(字符串、CancellationToken、对象[])
备注 如果没有现有的本地事务,将使用一个新的事务来执行命令。