EF Core-创建不带连接字符串的迁移

时间:2019-05-05 03:47:17

标签: c# entity-framework asp.net-core entity-framework-core ef-migrations

针对涉及该问题的内容,我涉及多个问题,教程和示例。

如果我在创建首次初始迁移时不知道连接字符串怎么办?给我机会在实例化上下文时设置连接字符串,例如:

var connection = @"Server=(localdb)\mssqllocaldb;Database=JobsLedgerDB;Trusted_Connection=True;ConnectRetryCount=0";
var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
optionsBuilder.UseSqlServer(connection);

using (var context = new BloggingContext(optionsBuilder.Options))
{
  // do stuff
}

docs中所述。.

如果您需要一个连接字符串来运行迁移,那么在那些没有连接字符串的情况下(租户数据库中可以从用户帐户获取连接字符串),如何运行初始迁移?

您是否创建了虚拟连接字符串来创建迁移..对我来说似乎有点狡猾。我希望对此有所投入。

1 个答案:

答案 0 :(得分:1)

您可以实现 IDesignTimeDbContextFactory,它将在设计时代替您的主机构建器使用。 UseSqlServer 现在有一个无参数重载。

它看起来像这样,并且必须与数据库上下文或启动项目在同一个程序集中:

public class MyAppDbContextFactory: IDesignTimeDbContextFactory<MyAppDbContext>
{
    public MyAppDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<MyAppDbContext>();
        optionsBuilder.UseSqlServer();
            
        return new MyAppDbContext(optionsBuilder.Options);
    }
}

可以在此处找到更多详细信息: https://docs.microsoft.com/en-us/ef/core/cli/dbcontext-creation?tabs=dotnet-core-cli#from-a-design-time-factory