繁体   English   中英

ASP.NET 核心:为什么我们需要 IDesignTimeDbContextFactory?

[英]ASP.NET Core : Why do we need IDesignTimeDbContextFactory?

我有一个 ASP.NET 核心应用程序,我只有DataContext ,我没有实现IDesignTimeDbContextFactory

public class DataContext : DbContext, IUnitOfWork
{...}

有了它,我可以做Add-MigrationUpdate-DatabaseScript-Migration

但是,我遇到了另一个他们已经实现IDesignTimeDbContextFactory的项目,提到这是为了生成迁移类。

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
    public CodingBlastDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();

        var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();

        var connectionString = configuration.GetConnectionString("DefaultConnection");

        builder.UseSqlServer(connectionString);

        return new CodingBlastDbContext(builder.Options);
    }
}

我想知道为什么需要这个? 特别是第一个项目没有实现IDesignTimeDbContextFactory ..

文档对何时可以利用设计时工厂有一些解释:

如果您需要在设计时与运行时不同地配置DbContext ,如果DbContext构造函数采用未在 DI 中注册的附加参数,如果您根本不使用 DI,或者如果出于某种原因,您不希望在 ASP.NET 核心应用程序的主 class 中使用CreateHostBuilder方法。

我个人遇到的唯一用例是当DbContext被移动到一个单独的库中并且我们不想运行CreateHostBuilder用于上下文设计目的(启动涉及一些相对繁重的东西,我们不想调用它)。 例如这里

暂无
暂无

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

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