簡體   English   中英

在 EntityFramework Core 的 DBContext 中使用可覆蓋方法進行模擬

[英]Impersonation using an overwriteable method in DBContext of EntityFramework Core

我們有一個舊的 WinForms 軟件,我們想將它遷移到 Asp.Net-Core。 舊數據庫需要 ActiveDirectory 用戶的最終用戶訪問權限。 我們的 Asp.Net-Core 應用程序使用 AppPool-User 運行,但 db 訪問需要模擬用戶上下文。

我只想執行模擬的數據庫調用。

如果我想在 SQL 發送到服務器之前掛鈎我的自定義代碼,我必須在 EF-Core 的 DBContext 類中覆蓋哪種方法?

我對操縱內部 ChangeTracking 的鈎子不感興趣。

如果您使用的是EF Core 3.0+ ,則可以使用Interceptors 但請記住,僅關系數據庫提供程序支持數據庫攔截器。 它們使您可以訪問典型的 db 命令操作,包括連接和事務管理。

您可以標記您的查詢,以便在攔截器邏輯中輕松識別它們。 您將在攔截器頁面中找到很好的示例。

Save 本身的覆蓋會為您解決問題嗎?

public class MyContext : DbContext
{
  public override int SaveChanges()
    {
      RunInpersonated();
      return base.SaveChanges();
    }
}

編輯:現在我又想到了,那只是為了寫訪問,而不是讀,你可能需要兩者。

您還可以實現存儲庫模式,並在那里添加您的模擬邏輯。 此外,當您在 IQueriable 上執行 ToListAsync() 之類的方法並獲取結果時,用於讀取查詢的 SQL 實際上會發送到數據庫。 您可以編寫自己的擴展方法,如 ToList,在那里添加您的模擬內容,然后調用普通的 ToList 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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