【问题标题】:Add migrations in Entity Framework Core with dynamic database connection使用动态数据库连接在 Entity Framework Core 中添加迁移
【发布时间】:2019-09-03 23:35:00
【问题描述】:

我正在使用 Entity Frameowrk Core 来处理 .NET Core 3.0 WPF 应用程序中的不同数据库。我为不同的用户使用不同的 SQLite DB 文件,因此每个登录用户的连接字符串都会改变。

我必须能够使用迁移,但是当我运行 dotnet ef migrations add V2 时,它会因为找不到数据库而失败。

在这种情况下如何生成迁移?

这是我的上下文代码:

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
      var connectionString = string.Format("Data Source={0}", GetDbPath(this.username));

      this.connection = new SqliteConnection(connectionString);
      this.connection.Open();

      options.UseSqlite(this.connection)
}

【问题讨论】:

  • 这有什么特别的原因吗?我的意思是.. 一开始每个用户都有一个数据库似乎有点奇怪。
  • 主要是为了避免每个带有用户 ID 的表都有复合键。同样通过这种方式,我们为不同的用户提供不同的文件,因此更容易处理单独的备份。
  • 但这有效吗?我的意思是.. 如果有 100 万用户怎么办?可能有点牵强,但.. 在表格中包含 userId 肯定看起来更好。这或多或少类似于多租户应用程序,所以我真的不明白为什么要为每个用户创建单独的文件。
  • 我在桌面应用程序中执行此操作,可能每台机器都有一个用户。让两个用户在同一台​​机器上使用该软件已经是一个边缘案例......此外,该应用程序仅在用户第一次登录时才会创建一个新的数据库文件。我同意这不是最好的设计,但对我们来说已经足够了。
  • 好吧,很公平。那么,您是否尝试在运行时调用myDbContext.Database.Migrate()

标签: .net-core entity-framework-core entity-framework-migrations


【解决方案1】:

最后我找到了一种解决方法,在生成迁移时临时使用固定的本地数据库路径,因此缺少变量不会出现运行时错误:

// var dbPath = GetDbPath(this.username);
var dbPath = "C:\\DB.db";
var connectionString = string.Format("Data Source={0}", dbPath);
...

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2019-01-11
    • 2022-12-09
    • 2018-06-08
    • 2017-06-17
    相关资源
    最近更新 更多