实体框架添加初始迁移创建数据库但不创建__MigrationHistory表

时间:2017-11-08 12:57:31

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

在一个新的代码优先的asp.net-core项目中连接到我的SQL服务器数据库。我跑的时候

add-migration MyInitialMigration

创建一个迁移文件,然后在SQL Server中执行创建数据库,包含字段,索引等的表结构,并使用来自我的DBInitialiser的种子数据填充表。表__MigrationHistory未在数据库中创建,并且已创建ModelSnapshot.cs文件。在这一点上,我还没有运行

update-database

从我能找到的所有内容中,我应该在实际创建数据库,种子数据等之前运行。据我所知,我没有启用自动迁移。

因此,后续迁移不会应用于数据库,因为这些表已经存在,我猜测它是通过查找__MigrationHistory表而不是在其中找到任何行来计算的。

如何获取初始add-migration以添加__MigrationHistory表格,或者如何才能在我输入update-database时才进行迁移?

不确定它是否相关,但上周正在迁移的另一个项目现在无法正常运行。迁移.cs文件创建正常,但是当它自动尝试创建数据库等时(之前我需要运行update-database)我得到错误

Invalid JSON primitive:  "C:\\x\\Migrations\\20171108125832_MyInitialMigration.cs",
  "metadataFile": "C:\\x\\Migrations\\20171108125832_MyInitialMigration.Designer.cs",
  "snapshotFile": "C:\\x\\Migrations\\MyContextModelSnapshot.cs"
}.

与以下命令有关,我是迁移.cs文件             migrationBuilder.CreateIndex(                 名称:" IX_tablea_tableID2",                 表:" tablea",                 column:" tableID2"); 据我所知,它与上面的几个代码块完全相同。我尝试删除迁移文件和数据库,然后以相同的效果重新运行add-migration。每次我删除所有内容并像这样重新开始时,不同的索引会导致错误消息,即使它在上次运行时也是如此。

是否有更新可以打破/改变我错过的迁移工作方式?

1 个答案:

答案 0 :(得分:0)

您的代码中必须包含一些奇怪的内容,例如调用dbContext.Database.EnsureCreatedAsync()。这将创建表和数据库,但不会进行迁移。

在以前版本的ASP.NET Core / EF Core(1.x)中,运行EF Core工具时,Configure类的Startup方法不会被执行({{1}在Powershell中或在命令行中add-migration

为了创建dotnet ef migrations add表,必须使用__MigrationHistorydbContext.Database.MigrateAsync() / database-update来应用迁移。

但是,对于新版本,迁移(或dotnet ef database update)将应用于每个 EF Core工具命令。

执行dbContext.Database.EnsureCreated()发现的新模式是拥有一个DbContext静态文件,该文件配置整个应用程序并在BuildWebHost方法中使用扩展方法来执行迁移和播种。 / p>

关于应用迁移(和种子)的新方法的我的previous answer涵盖了代码。

此更改的ASP.NET Core Annoucement文档(订阅此GitHub存储库以接收有关新功能和更改的通知总是一个好主意)