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

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

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

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

【问题讨论】:

    标签: entity-framework entity-framework-core transactionscope


    【解决方案1】:

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

    BeginTransaction(DatabaseFacade, IsolationLevel) or UseTransaction.
    

    参考 docs.microsoft.com

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

    【讨论】:

    • 你能给我们举个例子吗?我找不到任何关于如何使用“BeginTransaction(...,...)”的信息。
    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2021-03-02
    • 2015-06-16
    • 2016-05-20
    • 2011-02-07
    • 2013-03-08
    相关资源
    最近更新 更多