当前位置: 首页 > news >正文

笔记: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个人主页-哔哩哔哩视频

http://www.lryc.cn/news/397681.html

相关文章:

  • 准备工作+1、请求和响应+2、模型和管理站点
  • js 格式化时间
  • python 缩放照片
  • 【C语言】指针(1):入门理解(课堂随笔)
  • LLMs可以进行任务规划吗?如果不行,LLMs+GNN可以吗?
  • 性价比高充电宝有哪些?充电宝十大最佳品牌大盘点!
  • hnust 1963: 邻接矩阵表示法
  • Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
  • 215.Mit6.S081-实验三-page tables
  • flask使用定时任务flask_apscheduler(APScheduler)
  • ApiFox或postman怎么用params类型传输json或集合+json的String类型
  • 数据结构第16节 最大堆
  • 显卡、显卡驱动、cuda、cuDNN之间关系
  • Rewrk一个更现代的http框架基准测试实用程序
  • 【算法】排序算法介绍 附带C#和Python实现代码
  • 360安全浏览器就是不行-python秒破解
  • Python实现傅里叶级数可视化工具
  • PDF 分割拆分 API 数据接口
  • 【python】随机森林预测汽车销售
  • Stable Diffusion教程|练丹师是如何炼丹的Lora模型训练
  • QT--SQLite
  • 【深度学习入门篇 ②】Pytorch完成线性回归!
  • Syslog 管理工具
  • 硅纪元AI应用推荐 | 百度橙篇成新宠,能写万字长文
  • Codeforces Round 954 (Div. 3)
  • 【Django】报错‘staticfiles‘ is not a registered tag library
  • LeetCode 算法:二叉树的最近公共祖先 III c++
  • Windows CMD 命令汇总表
  • 【python+appium】自动化测试
  • vue 数据类型