我有一个包含多个DbContext类的项目:每个域一个。由于EF Core并不完美,因此我必须向每个DbContext添加一些功能,例如允许它处理SQL Server 2017的新JSON功能。我也添加了其他功能,但是为了简洁起见,我删除了它来自示例。
要将此JSON功能添加到每个DbContext中,我使用BaseDbContext,它是一个简单地扩展DbContext的抽象类。该功能的先决条件之一是拦截发送到数据库的SQL查询。为此,我使用了here中描述的策略。
在接下来的几周中,我们将进入不同的开发环境,我想通过“选项”模式根据当前环境注入正确的连接字符串。这在拦截策略中效果不佳。由于执行了拦截<String>
,因此实际上会在继续SomeDbContext的构造函数之前触发OnConfiguring函数,这意味着我的选项永远不会填满,从而导致NullReferenceException。
如何在不触发OnConfiguring的情况下扩展DbContext,同时避免代码重复?我也可以运行自定义的EF Core,但我想尽可能避免这种情况。
GetService<DiagnosticSource>()