【问题标题】:EF Core - Create a migration without connection stringEF Core - 创建没有连接字符串的迁移
【发布时间】:2019-05-05 03:47:16
【问题描述】:

我一直在研究多个问题、教程和示例,以寻找适合这个问题的东西。

如果我在创建第一个初始迁移时不知道我的连接字符串怎么办?鉴于我有机会在实例化上下文时设置连接字符串,例如:

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..中所述。

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

您是否创建了一个虚拟连接字符串来创建迁移.. 对我来说似乎很狡猾。我很想对此提供一些意见。

【问题讨论】:

  • 我不确定我是否正确理解了您的问题。但是您确实需要测试您的应用程序,因此在某些时候您需要有一个工作数据库,对吗?对于开发,我通常使用本地数据库(SQL Server 2017),连接字符串将指向本地服务器。
  • 我建议您编辑上一个问题,而不是再次询问基本相同的问题。
  • 你找到了关于这个的东西吗?我还添加了带有虚拟连接字符串的迁移,但是当谈到 Remove-Migration 时,我猜它不接受虚拟字符串,它失败了。
  • 你是怎么解决的,我也遇到了同样的问题

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2017-08-19
    • 2018-05-08
    • 2019-09-22
    • 2020-10-25
    • 2020-08-24
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多