在一个新的代码优先的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
。每次我删除所有内容并像这样重新开始时,不同的索引会导致错误消息,即使它在上次运行时也是如此。
是否有更新可以打破/改变我错过的迁移工作方式?
答案 0 :(得分:0)
您的代码中必须包含一些奇怪的内容,例如调用dbContext.Database.EnsureCreatedAsync()
。这将创建表和数据库,但不会进行迁移。
在以前版本的ASP.NET Core / EF Core(1.x)中,运行EF Core工具时,Configure
类的Startup
方法不会被执行({{1}在Powershell中或在命令行中add-migration
。
为了创建dotnet ef migrations add
表,必须使用__MigrationHistory
或dbContext.Database.MigrateAsync()
/ database-update
来应用迁移。
但是,对于新版本,迁移(或dotnet ef database update
)将应用于每个 EF Core工具命令。
执行dbContext.Database.EnsureCreated()
发现的新模式是拥有一个DbContext
静态文件,该文件配置整个应用程序并在BuildWebHost
方法中使用扩展方法来执行迁移和播种。 / p>
关于应用迁移(和种子)的新方法的我的previous answer涵盖了代码。
此更改的ASP.NET Core Annoucement文档(订阅此GitHub存储库以接收有关新功能和更改的通知总是一个好主意)