初始化DbContext时捕获异常

时间:2018-08-13 12:25:38

标签: c# sql-server asp.net-core exception-handling entity-framework-core

我一直试图捕获当表与它的对应实体不匹配时生成的异常,但是对于我来说,这无法解决我需要进行异常处理的地方。

数据库上下文是在启动时通过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方法中的异常捕获,就像它们是在此处定义的一样,它们是直到依赖项被调用才真正初始化。我还仔细研究了DbContextModelBuilder对象,以寻找一种方法来勾起引发的异常,但在这方面没有任何运气。

我目前正在考虑制作一个自定义的DbContext类,该类继承原始对象,纯粹是为了在此级别添加异常处理。这是可行的课程吗?

我无法将覆盖的DbContext.OnModelCreating方法包装在try-catch中,因为此代码非常流畅,并且下次进行的重新生成运行都会擦除所有编辑内容。

顺便说一句;而且我不知道它是否会有用,但是,我将构造函数分离为一个单独的部分,因为这些不是由其余代码生成的,因此需要保存它们以免被覆盖,例如一个在下面。

using Microsoft.EntityFrameworkCore;

namespace InterfaceLayer.Entities
{
    public partial class AccountsContext
    {
        public AccountsContext(
            DbContextOptions<AccountsContext> ContextOptions
        ) : base(ContextOptions) { }
    }
}

有人对我应该如何捕捉这些异常有任何建议吗?

0 个答案:

没有答案