笔记:Entity Framework Core 数据库迁移add-migration

一、目的:

        数据库迁移是一种管理数据库架构变化的技术,它允许开发者在应用程序的生命周期中安全地更新数据库架构,而不会丢失数据或破坏现有的数据库结构。在Entity Framework Core(EF Core)中,数据库迁移特别有用,因为它支持Code First开发模式,其中数据库架构是根据代码中的模型类自动创建和更新的。以下是进行数据库迁移的几个主要原因:


1.    版本控制和团队协作:

        数据库迁移允许将数据库架构的变化作为源代码的一部分进行版本控制。这对于团队协作和源代码管理非常重要,因为它确保所有开发者和部署环境都使用相同的数据库架构。


2.    迭代开发:

        在软件开发过程中,模型经常会发生变化。数据库迁移允许开发者逐步修改数据库架构,而不需要从头开始重建数据库,这有助于快速迭代和测试新功能。


3.    数据完整性:

        通过数据库迁移,可以在修改数据库架构的同时保持现有数据的完整性。例如,添加新列、更改数据类型或重命名列时,可以确保不会丢失数据。


4.    自动化部署:

        数据库迁移支持自动化部署流程,使得在不同环境(如开发、测试和生产环境)之间迁移和同步数据库架构变得简单和可靠。


5.    生产环境的安全更新:

在生产环境中直接修改数据库架构可能会带来风险。数据库迁移提供了一种安全的机制,通过预定义的迁移脚本来更新生产数据库,从而减少了直接数据库操作带来的风险。
通过使用EF Core的add-migration和Update-Database命令,开发者可以轻松地创建和应用数据库迁移,从而在整个应用程序的生命周期中管理数据库架构的变化。


二、实现

        add-migration命令是Entity Framework Core的一部分,用于在使用Code First方法时创建数据库迁移。这个命令会根据你的DbContext和实体类的当前状态,生成一个迁移文件,这个文件包含了更新数据库架构所需的所有命令。
根据你提供的文件内容,你已经准备好执行迁移命令了。这里是如何使用add-migration命令:
1.    打开Visual Studio的“包管理器控制台”(PMC)。
2.    确保PMC的默认项目设置为包含你的DbContext类的项目。在你的情况下,这个项目是H.Modules.Operation。
3.    在PMC中输入以下命令:

add-migration init -project H.Modules.Operation

这个命令会创建一个名为init的迁移。-project参数指定了包含DbContext的项目,这对于解决方案中包含多个项目的情况很有用。
执行这个命令后,EF Core会分析你的模型和当前数据库的架构(如果数据库存在),然后生成一个迁移文件,这个文件包含了使数据库架构与模型同步所需的所有命令。这个迁移文件会被添加到你的项目中,你可以查看和修改这个文件。
完成这一步后,你可以使用Update-Database命令来应用这个迁移,从而更新数据库架构。

三、基本步骤

步骤一:添加如下代码,配置设计时 DbContext 创建


    public class DataContextFactory : IDesignTimeDbContextFactory<DataContext>
    {
        public DataContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<DataContext>();
            optionsBuilder.UseSqlite("Data Source=Migration.db");

            return new DataContext(optionsBuilder.Options);
        }
    }


步骤二:保证整个解决方案生成成功

步骤三:DbContext必须放在当前程序集下面

步骤二:设置启动项


H.Modules.Operation

步骤三:执行迁移命令:生成迁移文件


add-migration init -project H.Modules.Operation

步骤四:执行更新数据库命令:同步到数据库中


Update-Database -project H.Modules.Operation

生产环境自动执行迁移,替换创建数据库方法
db.Database.Migrate();替换掉 db.Database.EnsureCreated();

五、需要了解的知识点

Code First 迁移 - EF6 | Microsoft Learn 

Entity Framework Core 概述 - EF Core | Microsoft Learn 

DbContext 生存期、配置和初始化 - EF Core | Microsoft Learn 

System.Windows.Controls 命名空间 | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关推荐

  1. 笔记:Entity Framework Core 数据库迁移add-migration

    2024-07-12 16:28:05       26 阅读
  2. 【ASP.NET CORE】EntityFrameworkCore 数据迁移

    2024-07-12 16:28:05       55 阅读
  3. golang使用migrate迁移pg数据库表报错处理

    2024-07-12 16:28:05       22 阅读
  4. 使用virsh migrate进行虚拟机迁移

    2024-07-12 16:28:05       54 阅读
  5. Migrations

    2024-07-12 16:28:05       26 阅读
  6. 学习补充008-xx-01 Migrations Overview(迁移概述)

    2024-07-12 16:28:05       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 16:28:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 16:28:05       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 16:28:05       58 阅读
  4. Python语言-面向对象

    2024-07-12 16:28:05       69 阅读

热门阅读

  1. 数据库系统中的Undo和Redo

    2024-07-12 16:28:05       25 阅读
  2. 写一个垃圾邮件二分类代码

    2024-07-12 16:28:05       24 阅读
  3. Sklearn 深入教程

    2024-07-12 16:28:05       24 阅读
  4. 深度解析:scikit-learn Pipeline记忆功能的秘密

    2024-07-12 16:28:05       25 阅读
  5. 由跨域引发一些思考

    2024-07-12 16:28:05       21 阅读
  6. 【AI研发工具包】sklearn教程(Scikit-learn)

    2024-07-12 16:28:05       24 阅读
  7. sklearn-learn的安装

    2024-07-12 16:28:05       20 阅读
  8. Spring Boot与GraphQL的集成

    2024-07-12 16:28:05       23 阅读
  9. 精准校准:深入解析scikit-learn中的StandardScaler

    2024-07-12 16:28:05       23 阅读
  10. Scikit-Learn的认识

    2024-07-12 16:28:05       26 阅读
  11. Spring Boot中如何集成GraphQL

    2024-07-12 16:28:05       24 阅读
  12. 概率预测的奥秘:深入sklearn模型的预测机制

    2024-07-12 16:28:05       25 阅读
  13. Spring Boot中使用GraphQL实现数据查询

    2024-07-12 16:28:05       26 阅读
  14. sklearn基础教程

    2024-07-12 16:28:05       25 阅读