国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何使用 .Net Core 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)

這篇具有很好參考價值的文章主要介紹了如何使用 .Net Core 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

當我們在編寫基于數(shù)據(jù)庫的應(yīng)用程序時,隨著需求的增加和改變,我們需要升級我們的數(shù)據(jù)庫,變更數(shù)據(jù)庫表的字段,當我們的系統(tǒng)的不同版本被部署到了不同的客戶那里,在需要給客戶升級時,我們?nèi)绾螌崿F(xiàn)數(shù)據(jù)庫模式 (schema) 的自動升級呢?

傳統(tǒng)的管理辦法是針對每個數(shù)據(jù)庫版本,開發(fā)者手工編寫升級腳本。在需要升級的時候,找到對應(yīng)的腳本挨個升級到指定的版本。編寫升級腳本是一件枯燥乏味且容易出錯的工作,手動升級也需要細心的操作。

數(shù)據(jù)庫遷移工具能否幫助我們解決這個問題,在 JAVA 世界有 Red Gate,Liquibase 這樣的解決方案。.Net Core 提供了 Entity Framework 數(shù)據(jù)遷移工具。它可以幫助我們自動管理數(shù)據(jù)庫模式,把不同版本的數(shù)據(jù)庫升級到最新版本上。

下面以 asp.net core 服務(wù)為例,簡要介紹如何使用 .Net Core Entity Framework Database Migration Tools

安裝 EF 工具

首先我們需要安裝 dotnet-ef,打開命令行,輸入如下命令:

dotnet tool install --global dotnet-ef

如果不安裝這個工具,我們可能會看到下面的錯誤:
如何使用 .Net Core 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)

創(chuàng)建數(shù)據(jù)庫項目,建立第一個遷移

進入 Visual Studio 創(chuàng)建一個 asp.net core 項目,然后在 program.cs 里加入以下代碼:


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

我們的配置文件,應(yīng)該是這個樣子的:

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

新建一個 YourDbContext 類,它應(yīng)該類似于下面的代碼:

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

        }

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

下表是我們的第一個數(shù)據(jù)庫表對應(yīng)的類,為了不綁定固定的數(shù)據(jù)庫,我們使用了通用的標記:

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

命令運行成功后,我們會在項目下發(fā)現(xiàn)一個新的文件夾,類似于下面的圖片:

如何使用 .Net Core 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)

執(zhí)行遷移升級數(shù)據(jù)庫

當我們的第一個遷移建立好了以后,我們就可以連接數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫表了。執(zhí)行下面的命令升級數(shù)據(jù)庫:

dotnet ef database update

升級成功后就可以看到類似于下面的結(jié)果了:
如何使用 .Net Core 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)

修改數(shù)據(jù)庫模式,再次升級數(shù)據(jù)庫

我們發(fā)現(xiàn)上面的 Enrollment 表沒有記錄創(chuàng)建時間。我們給它增加一個字段,名字叫 CreatedDate?,F(xiàn)在代碼被改為如下:

    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 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)
再次運行下面的命令,我們就可以把代碼的變化應(yīng)用到數(shù)據(jù)庫了:

dotnet ef database update

常見問題

在生產(chǎn)環(huán)境如何遷移

上面的方法需要安裝 .Net Core SDK, 在生產(chǎn)環(huán)境下可以運行以下命令生成執(zhí)行遷移:

dotnet ef migrations script --idempotent

啟動項目和數(shù)據(jù)庫項目分開的問題

如果我們的啟動項目 (startup project)和我們的數(shù)據(jù)庫項目是分開建立,那么運行上面的命令可能會出現(xiàn)錯誤,解決方案是在數(shù)據(jù)庫項目下運行遷移命令,但是需要加上 --startup 參數(shù)。類似于下面的示例:

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

SSL Error

如果出現(xiàn)下面的錯誤,我們需要給數(shù)據(jù)庫連接串加上 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 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)
https://stackoverflow.com/questions/72190575/asp-net-core-web-api-update-database-failed-due-to-provider-ssl-provider-err

結(jié)論

我們可以使用 .Net EF Migrations Tools 來管理我們的數(shù)據(jù)庫變更,這樣就可以不用擔心客戶的數(shù)據(jù)庫版本跟最新版本不一致而導(dǎo)致的變更跟蹤太復(fù)雜的問題了。文章來源地址http://www.zghlxwxcb.cn/news/detail-452496.html

到了這里,關(guān)于如何使用 .Net Core 實現(xiàn)數(shù)據(jù)庫遷移 (Database Migration)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • NET Core 6.0 webapi 簡單使用+連接數(shù)據(jù)庫

    NET Core 6.0 webapi 簡單使用+連接數(shù)據(jù)庫

    ASP.NET core NET core 6.0 如何使用 在 Program.cs里面 添加對應(yīng)注釋 效果: Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Core Newtonsoft.Json:用于Json格式轉(zhuǎn)換 添加測試Api Tips:這里用到ORM查詢語法 EntityFramework EF 常用增刪改查語句 運行結(jié)果

    2024年02月09日
    瀏覽(24)
  • 【C# .NET 】使用 Entity Framework Core 操作sqlite數(shù)據(jù)庫

    添加包 EF Core design package? ?NuGet Gallery | Home 使用用于?EF Core 遷移和現(xiàn)有數(shù)據(jù)庫中的反向工程(基架)的工具需要安裝相應(yīng)的工具包: 可在 Visual Studio?包管理器控制臺中使用的 PowerShell 工具的?Microsoft.EntityFrameworkCore.Tools 跨平臺命令行工具的?dotnet-ef?和?Microsoft.EntityFramewor

    2024年02月14日
    瀏覽(25)
  • 在Linux平臺下使用.NET Core訪問Access數(shù)據(jù)庫讀取mdb文件數(shù)據(jù)

    今天有群友在群里問 C# 能不能在 Linux 下訪問 Access數(shù)據(jù)庫 ? 我覺得這很有趣,因此研究折騰了一下,也因為很久沒有寫博文了,所以特意上來寫博文分享經(jīng)驗。 操作系統(tǒng): Ubuntu 22.04.3 LTS (Jammy) 開發(fā)工具: Visual Studio 2022 (17.8.0) 運行時版本: .NET Runtime 8.0 依賴庫: unixodbc 、

    2024年02月05日
    瀏覽(23)
  • EF Core實操,數(shù)據(jù)庫生成實體,遷移

    EF Core實操,數(shù)據(jù)庫生成實體,遷移

    大家好,我是行不更名,坐不改姓的宋曉剛,下面將帶領(lǐng)大家進入C#編程EF Core數(shù)據(jù)庫基礎(chǔ)入門知識,如何連接數(shù)據(jù)庫,如何編寫代碼,跟上我的步伐進入EF Core數(shù)據(jù)庫下的世界。 家人們,如果有什么不懂,可以留言,或者加我聯(lián)系方式,一起進入微軟技術(shù)的開拓。 微信:153

    2024年01月22日
    瀏覽(20)
  • .NET Core WebAPI中使用Log4net 日志級別分類并記錄到數(shù)據(jù)庫

    .NET Core WebAPI中使用Log4net 日志級別分類并記錄到數(shù)據(jù)庫

    記錄日志為文檔 記錄日志到數(shù)據(jù)庫

    2024年02月20日
    瀏覽(85)
  • 使用asp.net core web api創(chuàng)建web后臺,并連接和使用Sql Server數(shù)據(jù)庫

    使用asp.net core web api創(chuàng)建web后臺,并連接和使用Sql Server數(shù)據(jù)庫

    前言:因為要寫一個安卓端app,實現(xiàn)從服務(wù)器中獲取電影數(shù)據(jù),所以需要搭建服務(wù)端代碼,之前學(xué)過C#,所以想用C#實現(xiàn)服務(wù)器段代碼用于測試,本文使用C#語言,使用asp.net core web api組件搭建服務(wù)器端,并訪問sql server 數(shù)據(jù)庫。 一、安裝Visual studio 2022 社區(qū)版,并安裝ASP.NET和

    2024年02月14日
    瀏覽(28)
  • Spring Boot中如何使用Flyway進行數(shù)據(jù)庫遷移

    ????????在本文中,我們將了解如何使用 Flyway 來管理 Spring Boot 應(yīng)用程序中的 SQL 數(shù)據(jù)庫架構(gòu)。 ????????在本文中,我們將了解如何使用 Flyway 來管理Spring Boot應(yīng)用程序中的SQL 數(shù)據(jù)庫架構(gòu)。 Flyway是一個數(shù)據(jù)庫遷移工具,它提供遷移歷史和回滾的功能,并允許我們將應(yīng)用

    2024年02月12日
    瀏覽(15)
  • 遷移更新EF Core 中的sqlserver 數(shù)據(jù)庫提示0x80131904

    遷移更新EF Core 中的sqlserver 數(shù)據(jù)庫提示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 - 證書鏈是由不受信任的頒發(fā)機構(gòu)頒發(fā)的。) ?--- System.ComponentModel.Win32Exception (0x80090325): 證書鏈是由不受信任的頒發(fā)機構(gòu)頒發(fā)的

    2024年02月16日
    瀏覽(20)
  • NET Core添加 Sqlite 數(shù)據(jù)庫

    NET Core添加 Sqlite 數(shù)據(jù)庫

    .net framework 命令行項目使用 sqlite,DbContext C# .NET EF框架 webapi 安裝使用sqlite visual studio 2022,ADO.NET 實體數(shù)據(jù)模型添加 sqlite數(shù)據(jù)庫對象 Visual Studio 2022 .NET Core 6.0 Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Core Newtonsoft.Json ORMContext Program.cs 測試結(jié)果 Sqlite3是個特別好的本

    2024年02月11日
    瀏覽(23)
  • 【Flask 連接數(shù)據(jù)庫,使用Flask-Migrate實現(xiàn)數(shù)據(jù)庫遷移及問題匯總】

    Flask 連接數(shù)據(jù)庫,使用Flask-Migrate實現(xiàn)數(shù)據(jù)庫遷移 安裝Flask-Migrate插件 使用Flask-Migrate步驟 app.py主要用于數(shù)據(jù)庫連接 model.py 中導(dǎo)入了 db,作用是存儲一個User類 ,用于生成表頭。 manager.py用于數(shù)據(jù)遷移管理,運行后將生成一個文件夾。 Flask-Migrate運行 問題匯總 問題一:flask_mig

    2024年01月16日
    瀏覽(57)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包