【发布时间】: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