作为前言,你应该读一下罗恩·米勒的这篇文章:
... <代码>重新创建完全绕过迁移,只为您创建模式,不能将其与迁移混为一谈Encreated
是为测试或快速原型设计的,您可以每次删除并重新创建数据库。如果您正在使用迁移,并且希望在app start上自动应用迁移,那么您可以使用上下文。数据库改为Migrate()
。
根据这里的回答,你需要添加Globals。EnsureDatabase aseCreated();
它到Startup.cs
:
启动中的启动功能。反恐精英:
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
if (env.IsDevelopment())
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
Configuration = builder.Build();
Globals.Configuration = Configuration;
Globals.HostingEnvironment = env;
Globals.EnsureDatabaseCreated();
}
并定义Globals。EnsureDatabase aseCreated()
如下:
public static void EnsureDatabaseCreated()
{
var optionsBuilder = new DbContextOptionsBuilder();
if (HostingEnvironment.IsDevelopment()) optionsBuilder.UseSqlServer(Configuration["Data:dev:DataContext"]);
else if (HostingEnvironment.IsStaging()) optionsBuilder.UseSqlServer(Configuration["Data:staging:DataContext"]);
else if (HostingEnvironment.IsProduction()) optionsBuilder.UseSqlServer(Configuration["Data:live:DataContext"]);
var context = new ApplicationContext(optionsBuilder.Options);
context.Database.EnsureCreated();
optionsBuilder = new DbContextOptionsBuilder();
if (HostingEnvironment.IsDevelopment()) optionsBuilder.UseSqlServer(Configuration["Data:dev:TransientContext"]);
else if (HostingEnvironment.IsStaging()) optionsBuilder.UseSqlServer(Configuration["Data:staging:TransientContext"]);
else if (HostingEnvironment.IsProduction()) optionsBuilder.UseSqlServer(Configuration["Data:live:TransientContext"]);
new TransientContext(optionsBuilder.Options).Database.EnsureCreated();
}
使用上下文。数据库Migrate()
请参见此处或此处。
根据James P和Bassam Alugili提供的信息,我最终做的是将这些代码行添加到Startup
类(Startup.cs)中的Configure
方法中:
using (var scope =
app.ApplicationServices.CreateScope())
using (var context = scope.ServiceProvider.GetService<MyDbContext>())
context.Database.Migrate();
我认为这是一个重要的问题,应该得到很好的回答!
什么是数据库。重新创造?
context。数据库Ensurerecreated()
是一种新的EF核心方法,可确保上下文的数据库存在。如果存在,则不采取任何行动。如果它不存在,则会创建数据库及其所有模式,并确保它与该上下文的模型兼容。
注意:此方法不使用迁移来创建数据库。此外,以后无法使用迁移更新创建的数据库。如果您以关系数据库为目标并使用迁移,那么可以使用DbContext。数据库Migrate()
方法,以确保创建数据库并应用所有迁移。
EF 6是怎么做到的?
上下文。数据库。EnsureCreated()
等效于以下列出的EF 6方法:
>
启用迁移-EnableAutomatic Migrations.添加-迁移/更新-数据库。
来自代码:
数据库SetInitializer CreateDatabaseIfNotExists
或
使用DBMigRationalConfiguration并设置AutomaticMigRationalSenabled=true;
什么是数据库。迁徙
将上下文的所有挂起迁移应用于数据库。如果数据库不存在,将创建该数据库。
EF 6是怎么做到的?
上下文。数据库。Migrate()
相当于以下列出的EF 6方法:
>
更新数据库-TargetMigration
使用自定义DBMigOptionsConfiguration:
自动迁移启用=false;或使用DbMigrator。
结论:
如果您使用的是迁移,则存在上下文。数据库Migrate()
。如果不需要迁移,只需要一个快速的数据库(通常用于测试),那么使用上下文。数据库EnsureCreated()/EnsureDeleted()。
https://medium . com/Google-developers/understanding-migrations-with-room-f01e 04 b 07929上有一篇关于房间迁移的很棒的文章 然而,我仍然错过了房间中的“灾难”恢复机制(例如,当发生异常情况时,将清除并重新创建数据库的fallbackToDestructiveRecreationOnMigrationError(
问题内容: 使用SQLAlchemy,将创建一个Engine对象,如下所示: 如果to参数(在这种情况下为)中指定的数据库不存在,则访问将失败。如果指定的数据库不存在,是否可以告诉SQLAlchemy创建一个新数据库? 问题答案: 在postgres上,通常默认情况下存在三个数据库。如果您能够以超级用户身份(例如,角色)进行连接,则可以连接到或数据库。默认的pg_hba.conf只允许名为unix
MySQL 是一个使用广泛的数据库服务器,你肯定会在某些节点上安装配置 MySQL 服务器。 本节将向你展示如何安装配置 MySQL 服务器,以及如何为应用程序自动创建数据库和用户。 准备工作 如果你还没有 MySQL 模块,先创建一个: # mkdir /etc/puppet/modules/mysql # mkdir /etc/puppet/modules/manifests # mkdir
文档:https://eggjs.org/zh-cn/tutorials/sequelize.html sequelize 数据库迁移命令 命令 含义 sequelize db:migrate 运行迁移文件 sequelize db:migrate:status 列出所有迁移的状态 sequelize db:migrate:undo 隔离数据库:迁移:撤消 sequelize db:migrate
问题:是否可以在迁移脚本中创建一个新的DB,然后连接到它?怎么做? 我的场景:我试图在我的Java项目(使用Jersey2.4+Tomcat7+PostgreSQL 9.3.1+EclipseLink的RESTful应用程序)中使用flyway来管理使用Git的不同开发人员之间的更改。我编写了我的init脚本并运行它: 而且效果很好。问题是我不能用我的脚本创建新的DB。当我在脚本中包含以下一行时:
接下来要在本地新建数据库,创建一个名称为「tutorial」的空目录,并把它放在Git管理之下。 下面将以这个目录进行教程讲解。 Windows 首先在任意一个地方创建tutorial目录。若要把tutorial目录放在Git的管理之下,请右击后从菜单中选择「Git 在这里创建版本库」。 接着会显示以下画面。不要勾选‘制作纯版本库’,请直接点击’确定‘。 若创建数据库成功,将显示以下画面。请点击‘