Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF代码首次迁移:MigrateDatabaseToLatestVersion,不带NUGET_C#_Entity Framework_Ef Code First_Entity Framework Migrations - Fatal编程技术网

C# EF代码首次迁移:MigrateDatabaseToLatestVersion,不带NUGET

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

我需要帮助澄清EF Code First迁移如何在生产机器上工作。 我有一些实体类和DbContext派生类来访问实体。现在,我想做以下几件事:

  • 当我的应用程序启动时,若数据库不存在,它必须创建数据库
  • 然后必须根据模型调整数据库模式
  • 如果数据库刚刚创建,我想创建一些索引
  • 而且,若数据库是刚刚创建的,那个么它必须由一些初始数据进行播种
  • 所有这些操作都必须自动执行,无需任何NUGET命令或外部工具
我读过一些关于迁移的文章,但它们主要关注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表中存储的模型哈希与当前模型的哈希不匹配。