如何在原始查询中使用实体框架事务?

问题描述

我正在使用实体框架,但使用原始查询进行操作。我的操作如下:

  1. 使用integration_id检查recırd是否存在
  2. 退出删除记录
  3. 插入新记录

所以我使用事务

using (var transaction = await _context.Database.BeginTransactionAsync())
{ 
        var isExist = await IsExist(id);

        if (isExist)
        {
              var deleteQuery = "delete from ....";
              await _context.Database.ExecutesqlRawAsync(deleteQuery);
        }

        var insertQuery = "insert into ...";
        await _context.Database.ExecutesqlRawAsync(insertQuery);
}

如果插入操作失败,删除的记录是否回滚?

解决方法

此方法不会自行启动事务。如果您需要在事务中执行查询,您需要先调用

BeginTransaction(DatabaseFacade,IsolationLevel) or UseTransaction.

参考 docs.microsoft.com

因此,在您的情况下,它将在事务中执行查询并在任何查询失败时回滚所有查询

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...