我一直试图捕获当表与它的对应实体不匹配时生成的异常,但是对于我来说,这无法解决我需要进行异常处理的地方。
数据库上下文是在启动时通过ConfigureServices
方法添加的(为便于阅读而进行了修剪)
public void ConfigureServices(IServiceCollection Services)
{
...
Services.AddDbContext<AccountsContext>(Options =>
Options.UseSqlServer(
ApplicationConfig.GetConnectionString("Accounts")
)
);
Services.AddDbContext<SupportContext>(Options =>
Options.UseSqlServer(
ApplicationConfig.GetConnectionString("Support")
)
);
...
Services.AddMvc(Options =>
{
Options.Filters.Add(new AllowAnonymousFilter());
});
}
这些上下文是使用与“实体框架核心.NET命令行工具” NuGet打包在一起的Scaffold-DbContext
命令生成的。
追踪执行流程,我发现我不太可能(或不想)处理ConfigureServices
方法中的异常捕获,就像它们是在此处定义的一样,它们是直到依赖项被调用才真正初始化。我还仔细研究了DbContext
和ModelBuilder
对象,以寻找一种方法来勾起引发的异常,但在这方面没有任何运气。
我目前正在考虑制作一个自定义的DbContext类,该类继承原始对象,纯粹是为了在此级别添加异常处理。这是可行的课程吗?
我无法将覆盖的DbContext.OnModelCreating
方法包装在try-catch中,因为此代码非常流畅,并且下次进行的重新生成运行都会擦除所有编辑内容。
顺便说一句;而且我不知道它是否会有用,但是,我将构造函数分离为一个单独的部分,因为这些不是由其余代码生成的,因此需要保存它们以免被覆盖,例如一个在下面。
using Microsoft.EntityFrameworkCore;
namespace InterfaceLayer.Entities
{
public partial class AccountsContext
{
public AccountsContext(
DbContextOptions<AccountsContext> ContextOptions
) : base(ContextOptions) { }
}
}
有人对我应该如何捕捉这些异常有任何建议吗?