簡體   English   中英

如何在 Entity Framework Core 中執行手動 SQL 作為 SaveChanges 調用的一部分?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM