C# EF代码首次迁移:MigrateDatabaseToLatestVersion,不带NUGET
我需要帮助澄清EF Code First迁移如何在生产机器上工作。 我有一些实体类和DbContext派生类来访问实体。现在,我想做以下几件事:C# EF代码首次迁移:MigrateDatabaseToLatestVersion,不带NUGET,c#,entity-framework,ef-code-first,entity-framework-migrations,C#,Entity Framework,Ef Code First,Entity Framework Migrations,我需要帮助澄清EF Code First迁移如何在生产机器上工作。 我有一些实体类和DbContext派生类来访问实体。现在,我想做以下几件事: 当我的应用程序启动时,若数据库不存在,它必须创建数据库 然后必须根据模型调整数据库模式 如果数据库刚刚创建,我想创建一些索引 而且,若数据库是刚刚创建的,那个么它必须由一些初始数据进行播种 所有这些操作都必须自动执行,无需任何NUGET命令或外部工具 我读过一些关于迁移的文章,但它们主要关注NUGET的使用或运行时的纯自动数据库更新(通过Migra
- 当我的应用程序启动时,若数据库不存在,它必须创建数据库李>
- 然后必须根据模型调整数据库模式李>
- 如果数据库刚刚创建,我想创建一些索引李>
- 而且,若数据库是刚刚创建的,那个么它必须由一些初始数据进行播种李>
- 所有这些操作都必须自动执行,无需任何NUGET命令或外部工具
MigrateDatabaseToLatestVersion
)。我知道DbMigration
类,但我不明白如何将MigrateDatabaseToLatestVersion
策略和DbMigration
粘合在一起
更新。事实上,我不能在项目中使用NUGET,我需要“手动”进行迁移的可能性。只需使用
MigrateDatabaseToLatestVersion
当我的应用程序启动时,若数据库不存在,它必须创建数据库
MigrateDatabaseToLatestVersion
将执行此操作
然后必须根据模型调整数据库模式
MigrateDatabaseToLatestVersion
将执行此操作
如果数据库刚刚创建,我想创建一些索引
为数据库和Up
方法中的Sql
方法创建基于代码的初始迁移,以定义所需的所有索引
而且,若数据库是刚刚创建的,那个么它必须由一些初始数据进行播种
再次在初始迁移中使用Sql
,或在迁移配置中使用Seed
方法
所有这些操作都必须自动执行,无需任何NUGET命令或外部工具
NuGet和命令将帮助您在设计时准备它(但您可以简单地引用所需的程序集并自己编写所有代码)。运行时不需要任何powershell命令
DbMigrator
适用于您不想使用MigrateDatabaseToLatestVersion
并且希望控制代码迁移的场景。“基于代码的初始迁移”是DbMigration
的后代,对吗?CF如何知道必须立即应用MyInitialMigration:DbMigration
?addmigration
命令将为您创建DbMigration
类,但该类还有第二个自动生成的部分,其中实现了IMigrationMetadata
接口。此接口定义Id属性。我认为Id的序数值随着每次迁移而增加,因此迁移者使用Id以正确的顺序应用迁移,并查找已应用的迁移。嗯。。。我明白了imiglationMetadata
在应用特定迁移之前和之后为模型提供哈希值。这意味着,如果不使用NUGET,我无法手动实现imiglationMetadata
,不是吗?或者有一些公共API,可以计算模型的has?我不能使用NUGET(更新了问题)。@RudolfDvoracek:我不喜欢生产环境中的神奇工具。在部署它之前,我会使用脚本并在数据库备份上测试它(如果可能的话)。如果目标是测试环境,我可能会使用最简单的版本-MigrateDatabaseToLatestVersion或执行更新数据库的某些生成脚本。@RudolfDvoracek:如果将数据库初始值设定项设置为null,则在模型仍然与数据库兼容的情况下,它可能会工作。如果您的应用程序知道存在迁移,它将抛出异常,因为_MigrationHistory表中存储的模型哈希与当前模型的哈希不匹配。