我們需要在我們的應用程序中添加一個新的功能,例如對於我們的DbContext在其DbSets上執行的SELECT查詢,例如在調用MyDbContext.Users或MyDbContext.Students等時(用戶和學生從BaseEntity類繼承,包括一個Propery IsActive),我們將能夠攔截它們,檢查實體是否具有這種基本類型BaseEntity,並以某種方式修改查詢,例如添加一個where子句來檢查IsActive是否爲真。我試圖研究一下接口,但是它的方法(包括可能與我相關的方法)攔截在數據庫上執行的各種SELECT語句,而不僅僅是MyDbContext的dbset。
我如何以正確的方式做到這一點?如何在Entity Framework 6.3中使用攔截機制?
感謝,ashilon
優秀答案丹尼爾!很好的解釋和很好的解決方法。只是一個小問題:是否有一個原因,你返回IQueryable而不是DbSet? StudentsDbSet也需要是IQueryable嗎?非常感謝。 – ashilon
當您執行Where子句時,現在將成爲IQueryable。它不會再返回一個DbSet。我相信,您需要Context上的DbSet屬性,因爲這就是Entity Framework知道如何連接映射的方式。 –