繁体   English   中英

ASP.NET Core OnModelCreating强制在每个请求中触发

[英]ASP.NET Core OnModelCreating force to fire in every request

ASP.NET Core OnModelCreating强制在每个请求中触发

我有ASP.NET Core(1.1.0)和SQL Server数据库。 在登录页面中,我有一个带有带有公司名称的选择框的表单。

例如:

  • 公司1
  • 公司2

如果用户选择第一个“ Company 1”,则需要使用公司前缀重命名所有表:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    foreach (var entity in builder.Model.GetEntityTypes())
    {
       entity.Relational().TableName = "Company 1" + entity.DisplayName();
    }
}

它工作正常,但是问题是当用户选择了错误的公司,或者注销系统并使用其他公司重新登录时,OnModelCreating再也不会被调用,而且我无法重新配置dbContext。

是否可以为每个请求强制执行OnModelCreating?

还是在dbContext初始化后更改表名?

谢谢!

这是错误的方式。 当EF从您的类创建/描述模型时,将运行OnModelCreating 这里有很多反射和类型操作,包括验证关系,与真实数据库进行比较(并检查是否需要迁移)等等。 您是否真的需要在每个请求上都运行所有这些东西???

不要为每个请求重新创建DbContext。 创建多个DbContext,并在请求开始时选择其中一个(创建一次!)。

例如:

使您的主要DbContext抽象,并根据需要创建尽可能多的CompanyXDbContext。 它们都应继承自基类,并为基类提供简单的表前缀(在ctor中)。

在代码中的任何地方,当您需要DbContext时,请向DI索取抽象/基类。

Startup ,使用工厂方法注册抽象的DbContext,以根据当前的Request变量/参数选择真实的DbContext,或编写自定义中间件,该中间件根据当前Request创建正确的实例。


如果您有很多CompanyX,则可能需要其他东西,而不是许多预编码的CompanyXDbContext类,而某些东西已经创建了运行时类,或者可能是泛型的……但是主要思想仍然没有改变-不要一次又一次地重新创建模型每个请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM