如何使用 .Net Core 实现数据库迁移 (Database Migration)

这篇具有很好参考价值的文章主要介绍了如何使用 .Net Core 实现数据库迁移 (Database Migration)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当我们在编写基于数据库的应用程序时,随着需求的增加和改变,我们需要升级我们的数据库,变更数据库表的字段,当我们的系统的不同版本被部署到了不同的客户那里,在需要给客户升级时,我们如何实现数据库模式 (schema) 的自动升级呢?

传统的管理办法是针对每个数据库版本,开发者手工编写升级脚本。在需要升级的时候,找到对应的脚本挨个升级到指定的版本。编写升级脚本是一件枯燥乏味且容易出错的工作,手动升级也需要细心的操作。

数据库迁移工具能否帮助我们解决这个问题,在 JAVA 世界有 Red Gate,Liquibase 这样的解决方案。.Net Core 提供了 Entity Framework 数据迁移工具。它可以帮助我们自动管理数据库模式,把不同版本的数据库升级到最新版本上。

下面以 asp.net core 服务为例,简要介绍如何使用 .Net Core Entity Framework Database Migration Tools

安装 EF 工具

首先我们需要安装 dotnet-ef,打开命令行,输入如下命令:

dotnet tool install --global dotnet-ef

如果不安装这个工具,我们可能会看到下面的错误:
如何使用 .Net Core 实现数据库迁移 (Database Migration)

创建数据库项目,建立第一个迁移

进入 Visual Studio 创建一个 asp.net core 项目,然后在 program.cs 里加入以下代码:


builder.Services.AddDbContext<YourDbContext>(
    options => options.UseSqlServer("name=ConnectionStrings:DefaultConnection"));

我们的配置文件,应该是这个样子的:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=172.28.64.136;Database=YourDatabaseName;UID=sa;PWD=YourPassword;trustServerCertificate=true"
  }
}

新建一个 YourDbContext 类,它应该类似于下面的代码:

    public class YourDbContext : DbContext
    {
        public YourDbContext (DbContextOptions<EnrollmentContext> options) : base(options)
        {

        }

        public DbSet<Enrollment> Enrollments { get; set; }
    }

下表是我们的第一个数据库表对应的类,为了不绑定固定的数据库,我们使用了通用的标记:

public class Enrollment
    {
        public Guid Id { get; set; }

        #region OTP

        [MaxLength(16)]
        public String? OtpPassword { get; set; }

        public DateTime? Expiration { get; set; }

        #endregion

        #region Player Info

        [MaxLength(64)]
        public string PlayerId { get; set; }

        [MaxLength(128)]
        public string Name { get; set; }

        public DateTime Birthday { get; set; }

        [StringLength(3)]
        public string CountryIsoCode { get; set; }

        [MaxLength(128)]
        public string Email { get; set; }

        #endregion
    }

编译成功后,在项目文件夹下输入下面的命令:

dotnet ef migrations add InitialCreate

命令运行成功后,我们会在项目下发现一个新的文件夹,类似于下面的图片:

如何使用 .Net Core 实现数据库迁移 (Database Migration)

执行迁移升级数据库

当我们的第一个迁移建立好了以后,我们就可以连接数据库创建数据库表了。执行下面的命令升级数据库:

dotnet ef database update

升级成功后就可以看到类似于下面的结果了:
如何使用 .Net Core 实现数据库迁移 (Database Migration)

修改数据库模式,再次升级数据库

我们发现上面的 Enrollment 表没有记录创建时间。我们给它增加一个字段,名字叫 CreatedDate。现在代码被改为如下:

    public class Enrollment
    {
        public Guid Id { get; set; }

        #region OTP

        [MaxLength(16)]
        public String? OtpPassword { get; set; }

        public DateTime? Expiration { get; set; }

        #endregion

        #region Player Info

        [MaxLength(64)]
        public string PlayerId { get; set; }

        [MaxLength(128)]
        public string Name { get; set; }

        public DateTime Birthday { get; set; }

        [StringLength(3)]
        public string CountryIsoCode { get; set; }

        [MaxLength(128)]
        public string Email { get; set; }

        #endregion

        public DateTime CreatedDate { get; set; }
    }

然后运行下面的命令,增加第二个迁移。注意,在修改完上面的代码以后一定要编译我们的项目,否则下面的命令可能侦测不到代码的变化。

dotnet ef migrations add addEnrollmentCreatedDate

完成以后,项目的 migration 文件夹会增加一个 addEnrollmentCreatedDate.cs 文件。
如何使用 .Net Core 实现数据库迁移 (Database Migration)
再次运行下面的命令,我们就可以把代码的变化应用到数据库了:

dotnet ef database update

常见问题

在生产环境如何迁移

上面的方法需要安装 .Net Core SDK, 在生产环境下可以运行以下命令生成执行迁移:

dotnet ef migrations script --idempotent

启动项目和数据库项目分开的问题

如果我们的启动项目 (startup project)和我们的数据库项目是分开建立,那么运行上面的命令可能会出现错误,解决方案是在数据库项目下运行迁移命令,但是需要加上 --startup 参数。类似于下面的示例:

dotnet ef --startup-project ..\EnrollmentApi\  migrations add InitialCreate

SSL Error

如果出现下面的错误,我们需要给数据库连接串加上 trustServerCertificate=true

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)

如何使用 .Net Core 实现数据库迁移 (Database Migration)
https://stackoverflow.com/questions/72190575/asp-net-core-web-api-update-database-failed-due-to-provider-ssl-provider-err

结论

我们可以使用 .Net EF Migrations Tools 来管理我们的数据库变更,这样就可以不用担心客户的数据库版本跟最新版本不一致而导致的变更跟踪太复杂的问题了。文章来源地址https://www.toymoban.com/news/detail-452496.html

到了这里,关于如何使用 .Net Core 实现数据库迁移 (Database Migration)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NET Core 6.0 webapi 简单使用+连接数据库

    ASP.NET core NET core 6.0 如何使用 在 Program.cs里面 添加对应注释 效果: Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Core Newtonsoft.Json:用于Json格式转换 添加测试Api Tips:这里用到ORM查询语法 EntityFramework EF 常用增删改查语句 运行结果

    2024年02月09日
    浏览(31)
  • 【C# .NET 】使用 Entity Framework Core 操作sqlite数据库

    添加包 EF Core design package   NuGet Gallery | Home 使用用于 EF Core 迁移和现有数据库中的反向工程(基架)的工具需要安装相应的工具包: 可在 Visual Studio 包管理器控制台中使用的 PowerShell 工具的 Microsoft.EntityFrameworkCore.Tools 跨平台命令行工具的 dotnet-ef 和 Microsoft.EntityFramewor

    2024年02月14日
    浏览(44)
  • 在Linux平台下使用.NET Core访问Access数据库读取mdb文件数据

    今天有群友在群里问 C# 能不能在 Linux 下访问 Access数据库 ? 我觉得这很有趣,因此研究折腾了一下,也因为很久没有写博文了,所以特意上来写博文分享经验。 操作系统: Ubuntu 22.04.3 LTS (Jammy) 开发工具: Visual Studio 2022 (17.8.0) 运行时版本: .NET Runtime 8.0 依赖库: unixodbc 、

    2024年02月05日
    浏览(31)
  • EF Core实操,数据库生成实体,迁移

    大家好,我是行不更名,坐不改姓的宋晓刚,下面将带领大家进入C#编程EF Core数据库基础入门知识,如何连接数据库,如何编写代码,跟上我的步伐进入EF Core数据库下的世界。 家人们,如果有什么不懂,可以留言,或者加我联系方式,一起进入微软技术的开拓。 微信:153

    2024年01月22日
    浏览(29)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

    记录日志为文档 记录日志到数据库

    2024年02月20日
    浏览(37)
  • 使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

    前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端,并访问sql server 数据库。 一、安装Visual studio 2022 社区版,并安装ASP.NET和

    2024年02月14日
    浏览(43)
  • Spring Boot中如何使用Flyway进行数据库迁移

            在本文中,我们将了解如何使用 Flyway 来管理 Spring Boot 应用程序中的 SQL 数据库架构。         在本文中,我们将了解如何使用 Flyway 来管理Spring Boot应用程序中的SQL 数据库架构。 Flyway是一个数据库迁移工具,它提供迁移历史和回滚的功能,并允许我们将应用

    2024年02月12日
    浏览(36)
  • 迁移更新EF Core 中的sqlserver 数据库提示0x80131904

    Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)  --- System.ComponentModel.Win32Exception (0x80090325): 证书链是由不受信任的颁发机构颁发的

    2024年02月16日
    浏览(39)
  • NET Core添加 Sqlite 数据库

    .net framework 命令行项目使用 sqlite,DbContext C# .NET EF框架 webapi 安装使用sqlite visual studio 2022,ADO.NET 实体数据模型添加 sqlite数据库对象 Visual Studio 2022 .NET Core 6.0 Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Core Newtonsoft.Json ORMContext Program.cs 测试结果 Sqlite3是个特别好的本

    2024年02月11日
    浏览(38)
  • 【Flask 连接数据库,使用Flask-Migrate实现数据库迁移及问题汇总】

    Flask 连接数据库,使用Flask-Migrate实现数据库迁移 安装Flask-Migrate插件 使用Flask-Migrate步骤 app.py主要用于数据库连接 model.py 中导入了 db,作用是存储一个User类 ,用于生成表头。 manager.py用于数据迁移管理,运行后将生成一个文件夹。 Flask-Migrate运行 问题汇总 问题一:flask_mig

    2024年01月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包