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

Posted

技术标签:

【中文标题】如何在原始查询中使用实体框架事务?【英文标题】:How to use entity framework transaction in raw query? 【发布时间】:2021-04-26 20:04:47 【问题描述】:

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

    检查是否存在带有 integration_id 的 recırd 退出时删除记录 插入新记录

所以我正在使用事务

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);

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

【问题讨论】:

【参考方案1】:

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

BeginTransaction(DatabaseFacade, IsolationLevel) or UseTransaction.

参考 docs.microsoft.com

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

【讨论】:

你能给我们举个例子吗?我找不到任何关于如何使用“BeginTransaction(...,...)”的信息。

以上是关于如何在原始查询中使用实体框架事务?的主要内容,如果未能解决你的问题,请参考以下文章

在 Dapper 和实体框架中处理对象的方式有啥区别 - 使用原始 SQL 查询?

如何在实体框架查询中使用多表达式方法[重复]

投影查询:如何使用 JPA 为 AppEngine 中的新实体加载原始字符串?

如何在 MCV 中合并两个实体框架查询

实体框架中的一个事务中的许多更新语句

如何查询实体框架中的非映射属性?