[英]How can I save Image file to SQL database with .NET Core and EF
[英]How can I create a database on the fly with .NET Core EF
我遇到了dotnet ef
的问题。 我正在尝试为遇到的每个子域创建一个新数据库。 我知道我可以在这里使用_context.Database.Migrate()
,但它似乎只能在 Startup & Program 类中使用。
当程序已经运行时,我该怎么做? 因为我只能在应用程序运行时获取子域
这是我尝试过的:
// Db Context
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// _ecosystemServices.GetSubdomain gets the domain
var subdomain = _ecosystemServices.GetSubDomain(_accessor);
// _ecosystemServices.GetConnectionString returns the appropriate connection string based on the subdomain
optionsBuilder.UseSqlServer(_ecosystemServices.GetConnectionString(subdomain));
// Attempting to create the database
_context.Database.Migrate();
}
但这不起作用,我得到一个循环依赖错误。 我应该怎么办?
提前致谢。
使用 EF Core,您可以使用以下之一
context.Database.Migrate()
或者
context.Database.EnsureCreated(),
其中context
是DbContext
。
您在哪里调用这些取决于您的应用程序的逻辑,但在OnConfiguring()
绝对不是正确的位置,因为当必须创建数据库时,EF 首先创建 model 并因此调用OnConfiguring()
。 因此,您应该收到堆栈溢出消息。
至于循环依赖,我无法判断,但 C# 编译器太聪明了,会将可能的堆栈溢出转换为循环依赖(坦率地说,我对此表示怀疑),或者错误的根源来自其他地方。
但是,您应该注意Migrate()
和EnsureCreatd()
之间的区别。 第二个不会在您的代码中应用迁移。 这是Rowan Miller对Github中两种方法的类似问题的回答:
您可以调用 EnsureCreated() 或 Migrate()。 EnsureCreated() 是一种替代方法,它完全跳过迁移管道,只创建一个与您当前的 model 匹配的数据库。 当 model 发生变化时,当您很高兴删除并重新创建数据库时,这对于单元测试或非常早期的原型设计很有用。
您可以将所有代码替换为 db.Database.Migrate();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.