[英]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.