如何在原始查询中使用实体框架事务?
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 查询?