EF迁移命令

EF迁移设置的最后一步是在包管理器控制台中输入命令“add-migration InitialMigration -IgnoreChanges”。“InitialMigration”(高亮的黄色)是您想要给当前迁移的名称,“IgnoreChanges”句柄是告诉EF Migrations您想要忽略当前数据库:这意味着您希望EF忽略所有现有表,以便不会为现有表生成脚本。

enable-migrations

update-database

获取迁移的脚本

在运行 Update-Database 的时候,使用参数 -Script 。

-SourceMigration:$InitialDatabase 用来指定起始的版本, -TargetMigration:"AddPostAbstract" 用来指定目标版本。

Update-Database to bring the database up-to-date. This time let’s specify the –Verbose flag so that you can see the SQL that Code First Migrations is running.

https://msdn.microsoft.com/en-us/data/jj591621.aspx#script

1.Add-Migration Initia-IgnoreChanges 生成已有数据库初始化代码

2.update-database -verbose 升级数据库并显示sql语句

3.Update-Database -Script -SourceMigration:"201309201643300_AddCity.cs" -TargetMigration:"201309201708043_ModifyCity.cs"  这个是生成两次迁移的sql语句,TargetMigration省略是到最新

4.simplemembership的数据库没有migration表 所以迁移的时候如果丢失了迁移类会很麻烦,建议手工修改即可。

5.context的静态构造函数中可以设置数据库初始化器(用于调试)

1
2
3
4
5
6
7
8
9
10
static PortalContext()
{
     Database.SetInitializer<PortalContext>( null );
 
 
//DropCreateDatabaseIfModelChanges
//CreateDatabaseIfNotExists
//DropCreateDatabaseAlways
//MigrateDatabaseToLatestVersion
}

6.Get-Migrations 获取已经应用的迁移

7.Enable-Migrations

在Package Manager Console中执行Enable-Migrations启动迁移。

执行get-help Enable-Migrations –detailed 查看Enable-Migrations的详细用法。

-ContextTypeName 指定要使用的Context

-EnableAutomaticMigrations 启动自动迁移

-ProjectName 指定搭建的迁移类添加到的项目

-StartUpProjectName 指定使用的配置文件所在的项目

-ConnectionStringName 指定使用配置文件中连接字符串的名称

-ConnectionString 指定使用的连接字符串

-ConnectionProviderName 指定连接字符串的provider名称

8.Add-Migration

在Package Manager Console中执行Add-Migration搭建挂起的Model变化迁移脚本。

执行get-help Add-Migration –detailed查看Add-Migration的详细用法。

-Name 指定自定义脚本的名称

-Force

-ProjectName

-StartUpProjectName

-ConfigurationTypeName 指定使用的迁移配置

-IgnoreChanges 忽略检测到挂起的model改变,创建一个空的迁移。这个选项可用来为已有的数据库启用迁移创建一个初始的,空的迁移。

-ConnectionStringName 指定使用配置文件中连接字符串的名称

-ConnectionString 指定使用的连接字符串

-ConnectionProviderName 指定连接字符串的provider名称

9.Update-Database

在Package Manager Console中执行Update-Database将挂起的迁移更新到数据库。

执行get-help Update-Database -detailed查看Add-Migration的详细用法。

-SourceMigration 只有-Script打开时才有效。指定迁移的名称用作更新的起点。忽略则使用最后一次应用的迁移。

-TargetMigration 指定将数据库更新到哪个迁移的名称。

-Script 生成SQL脚本

-Force

-ProjectName

-StartProjectName

- ConfigurationTypeName

-ConnectionStringName 指定使用配置文件中连接字符串的名称

-ConnectionString 指定使用的连接字符串

-ConnectionProviderName 指定连接字符串的provider名称

 http://blog.youkuaiyun.com/foren_whb/article/details/45576853

 

 

 

 

 

Context构造函数
不检查__MigrationHistory 取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。
Database.SetInitializer<Context>(null);
重新创建数据库
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>()); 
重建数据库运行,生产环境此法严禁使用。


迁移方法1:
AutomaticMigrationsEnabled=true;自动迁移
Enable-Migrations 启用迁移
Add-Migration 为挂起的Model变化添加迁移脚本
Update-Database 将挂起的迁移更新到数据库
Update-Database -Verbose 将模型更新到数据库中并显示更新脚本,将更新脚本复制下来在生产环境中运行
Get-Migrations 获取已经应用的迁移


AutomaticMigrationsEnabled=false;非自动迁移
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConnectionStringName <String>] [-Force] [<CommonParameters>]
ContextTypeName:项目继承自DBContext的类名字。
EnableAutomaticMigrations:开启自动迁移。
ProjectName:存放DBContext类的项目名称。
StartUpProjectName:解决方案中启动项目的名称,作用是调用该项目下的连接字符串。
ConnectionStringName:连接字符串名称
上面五个参数是解决问题必须的,其它的无关紧要。
例如:
Enable-Migrations -ContextTypeName "MVCCodeFirst.BlogEntities" -ProjectName "MVCCodeFirst" -StartUpProjectName "MVCCodeFirst" -ConnectionStringName "BlogEntities" -Verbose
依次填好之后,问题解决。
同样的在Add-Migration、Update-Database的时候也需要填写相应的参数。否则会出现同样错误。
例如:
Add-Migration -Name "EditCST_DevicePhoto"  -ProjectName "DBAccessLib" -StartUpProjectName "WebSite" -ConnectionStringName "TJSSDBContext" -Verbose
Update-Database -Script -ProjectName "DBAccessLib" -StartUpProjectName "WebSite" -ConnectionStringName "TJSSDBContext"  -Verbose


迁移方法2:
生产环境中__MigrationHistory表删除,将生产环境中的表与模型更新成一致。

<think>我们正在寻找Entity Framework Core的迁移命令。这些命令用于管理数据库迁移,包括创建迁移、应用迁移、回滚迁移等。 根据用户提供的引用,他们似乎在使用Entity Framework Core(在C#中)和Spring Security(在Java中),但主要问题集中在EF Core迁移命令上。 因此,我们将提供Entity Framework Core的迁移相关命令。 注意:这些命令是通过.NET Core CLI(命令行界面)或Package Manager Console(在Visual Studio中)执行的。 主要命令如下: 1. 创建迁移(Add-Migration): 用于基于模型的更改创建新的迁移文件。 2. 更新数据库(Update-Database): 将挂起的迁移应用到数据库。 3. 移除迁移(Remove-Migration): 移除最后一次创建的迁移(如果尚未应用到数据库)。 4. 生成SQL脚本(Script-Migration): 生成一个SQL脚本,用于将数据库从当前状态迁移到目标迁移状态。 5. 列出迁移(Get-Migrations): 列出已应用到数据库的所有迁移。 6. 数据库相关命令(DbContext): 用于DbContext相关的操作,例如检查数据库状态。 下面我们将详细列出这些命令及其常用参数。 注意:有两种执行环境: - Package Manager Console(在Visual Studio中):使用类似PowerShell的命令(例如:Add-Migration)。 - .NET Core CLI(命令行):使用dotnet ef命令(例如:dotnet ef migrations add)。 我们将分别列出这两种环境下的命令。</think>以下是 Entity Framework Core 的核心迁移命令,用于数据库模式管理和版本控制: ### 一、核心迁移命令(通过 .NET CLI) | 命令 | 说明 | 示例 | |------|------|------| | `dotnet ef migrations add` | 创建新迁移文件 | `dotnet ef migrations add InitialCreate` | | `dotnet ef migrations remove` | 删除最新迁移文件 | `dotnet ef migrations remove` | | `dotnet ef migrations list` | 列出所有迁移 | `dotnet ef migrations list` | | `dotnet ef database update` | 应用挂起迁移数据库 | `dotnet ef database update` | | `dotnet ef database update --target` | 迁移到特定版本 | `dotnet ef database update 202405121234_InitialCreate` | | `dotnet ef migrations script` | 生成迁移SQL脚本 | `dotnet ef migrations script -o migration.sql` | | `dotnet ef database drop` | 删除数据库 | `dotnet ef database drop --force` | ### 二、Visual Studio 包管理器控制台命令 | 命令 | 等价命令 | |------|----------| | `Add-Migration` | `dotnet ef migrations add` | | `Remove-Migration` | `dotnet ef migrations remove` | | `Update-Database` | `dotnet ef database update` | | `Script-Migration` | `dotnet ef migrations script` | ### 三、关键工作流示例 1. **创建并应用迁移** ```bash dotnet ef migrations add AddProductTable dotnet ef database update ``` 2. **生成回滚脚本** ```bash # 生成从当前版本回退到初始状态的SQL dotnet ef migrations script InitialCreate AddProductTable -o rollback.sql ``` 3. **迁移到特定版本** ```bash dotnet ef database update 202405120800_InitialCreate ``` ### 四、高级配置 1. **在代码中执行迁移**(如引用[3]所示) ```csharp // Startup.cs public void Configure(IApplicationBuilder app, BloggingContext context) { context.Database.Migrate(); // 自动应用挂起迁移 } ``` 2. **在DbContext中检查迁移**(如引用[1]所示) ```csharp public class DataContext : DbContext { public DataContext(DbContextOptions<DataContext> options) : base(options) { if (Database.GetPendingMigrations().Any()) { Database.Migrate(); // 执行迁移 } } } ``` ### 五、最佳实践 1. **迁移文件管理** - 每个迁移应有描述性名称(如 `AddUserEmailColumn`) - 避免直接修改已提交的迁移文件 - 团队共享时需同步迁移文件 2. **生产环境部署** - 使用 `dotnet ef migrations script` 生成SQL脚本审核后再执行 - 结合CI/CD管道自动化迁移流程 - 始终在部署前备份数据库 > **迁移原理**:EF Core通过 `__EFMigrationsHistory` 跟踪已应用的迁移[^1],迁移文件包含 `Up()` 和 `Down()` 方法分别对应应用和回滚操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值