[英]How to extend DbContext with partial class and partial OnModelCreating method in EntityFramework Core
[英]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.