[英]How to execute manual SQL as part of SaveChanges call in Entity Framework Core?
我正在寻找一种将手动原始 SQL 调用添加到标准 AppDbContext 交互的方法。 假设我有以下代码:
Message m = new Message
{
Title = message.Title,
Body = message.Body,
Date = DateTime.Now,
Foo = "foo"
};
_context.Messages.Add(m);
// Add some manual UPDATE SQL here, like:
// UPDATE SomeOtherTable SET Foo = 'Something' WHERE SomeComplex = 'Condition'
_context.SaveChanges();
最重要的是使手动 SQL 作为 SaveChanges 的一部分创建和执行的命令/事务的一部分。 如果有办法将我的修改注入 SaveChanges 生成的 SQL - 这就是我正在寻找的。
我在我的 DbContext 基础上使用 SaveChangesAsync 的重载,它接受任何任意原始 sql,关键是将所有处理包装在手动创建的事务中:
public async Task<int> SaveChangesAsync(string customCommand,
CancellationToken cancellationToken = default(CancellationToken),
params object[] parameters)
{
using (var transaction = Database.BeginTransaction())
{
try
{
var result = await base.SaveChangesAsync(true, cancellationToken);
await Database.ExecuteSqlCommandAsync(customCommand, parameters);
transaction.Commit();
return result;
}
catch (Exception ex)
{
transaction.Rollback();
throw ex.Handle();
}
}
}
注意:Handle() 是一种扩展方法,我将 t-sql 异常转换为我的业务异常,因此该方法与此处无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.