我可以在EntityFramework Core 1.0 rc2中配置攔截器嗎?

c# entity-framework-core visual-studio-2015

在本博客文章中所示的實體框架6中,有一種方法可以配置攔截器,該攔截器可以記錄所有慢速查詢,包括堆棧回溯。

2015年的一個問題是關於之前稱為EF7的測試版的早期測試結果,這表明在asp.net vnext早期測試版中它是不可能的

然而,EF Core的整個設計是可組合的,並且在這裡討論github bug跟踪器時,你可能有一種技術可以將一些低級類(如SqlServerConnection子類化,然後在那裡覆蓋一些方法,以獲得一些你可以獲得的點數。執行查詢之前和之後的掛鉤,如果執行了毫秒計時器值,則添加一些低級別日誌記錄。

這仍然是必要的,也是EF Core 1.0.0-rc2-final中的唯一技術(目前截至2016年6月)?

一般承認的答案

EF Core還沒有“攔截器”或類似的生命週期鉤子。此功能在此處進行跟踪: https//github.com/aspnet/EntityFramework/issues/626

如果您想要的只是日誌輸出,則可能不需要覆蓋低級組件。許多低級EF Core組件已經生成日誌記錄,包括查詢執行。您可以通過調用DbContextOptionsBuilder.UseLoggerFactory(ILoggerFactory factory)將EF配置為使用自定義記錄器工廠。 (有關此記錄器界面的更多詳細信息,請參閱https://docs.asp.net/en/latest/fundamentals/logging.htmlhttps://github.com/aspnet/Logging。)EF Core會生成一些值得注意的日誌事件明確定義的事件ID。 (請參閱1.0.0-rc2中的Microsoft.EntityFrameworkCore.Infrastructure.CoreLoggingEventId ,它已重命名為1.0.0 RTM的Microsoft.EntityFrameworkCore.Infrastructure.CoreEventId 。)請參閱https://docs.efproject.net/en/latest/其他/ logging.html用於執行此操作的示例。

如果您需要超出EF Core組件已經生成的額外日誌記錄,則需要覆蓋EF Core的較低級別組件。最好通過覆蓋現有組件並通過依賴注入將此重寫版本添加到EF來完成。這樣做需要為EF配置自定義服務提供程序以在內部使用。這由DbContextOptionsBuilder.UseInternalServiceProvider(IServiceProvider services)配置。有關EF如何在內部使用服務的更多詳細信息,請參閱https://docs.efproject.net/en/latest/miscellaneous/internals/services.html



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因