我有疑问,_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;
}
}
}
我认为该方法不会自动提交事务,因此我决定手动提交。
这是一个好习惯吗?或者没有必要这样做?
答案 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 [])
备注 如果没有现有的本地事务,将使用新事务执行命令。