net6 Mysql CodeFirst 配置和創建更新數據庫


以前做的項目都是先有數據庫,沒有機會用Codefisrt,當然肯定有方法解決這類問題,只是我沒有研究過。

 

第一次使用CodeFirst方式做項目。記下幾個概念和操作,備查。

一、 在ef core中,管理數據庫架構的方法:code-first 和 database-first 分別稱為:遷移和反向工程。

遷移是以 EF Core 模型為准,以增量方式將相應架構更改應用到數據庫,以使數據庫保持與 EF Core 模型兼容。

反向工程以數據庫架構為准,通過將數據庫架構反向工程到 EF Core 模型來生成相應的 DbContext 和實體類型。

 

二、以連接到Mysql為例,在Net6中如何配置efcore

1. 首先引入相應的包:

Install-Package Microsoft.EntityFrameworkCore -version 6.0.1 
Install-Package Microsoft.EntityFrameworkCore.Tools -version 6.0.1

2. Mysql引入:

Install-Package Pomelo.EntityFrameworkCore.MySql -version 6.0.0

 

3. 編寫實體類 - User

查看代碼
    [Table("User")]
    public class User
    {
        [Key]
        [MaxLength(255)]
        public string id { get; set; }

        [MaxLength(255), Required]
        public string name { get; set; }

        [MaxLength(255), Required]
        public int age { get; set; }

        [MaxLength(255), Required]
        public string email { get; set; }

        [MaxLength(255), Required]
        public string password { get; set; }

        [MaxLength(255), Required]
        public DateTime datCreate{ get; set; }

        [MaxLength(255), Required]
        public string salt { get; set; }

        [MaxLength(255)]
        public string showName { get; set; }

        [MaxLength(255)]
        public string displayName { get; set; }

        public int point { get; set; }

    }

 

4. 編寫UserDbContext:

查看代碼
public class UserDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }

        /// <summary>
        /// 一定要有默認構造方法,否則在生成migration時會報錯。
        /// </summary>
        public UserDbContext() : base()
        {

        }
        public UserDbContext(DbContextOptions<UserDbContext> options)
        : base(options)
        {

        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //如果為實體類單獨建了類庫,需要在此處配置數據庫連接。
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseMySql("Server=yourserver;Port=yourport;Database=yourdatabasename;Uid=youruser;Pwd=yourpwd;", ServerVersion.AutoDetect("Server=yourserver;Port=yourport;Database=yourdatabasename;Uid=youruser;Pwd=yourpwd;"));
            }

            optionsBuilder.UseLazyLoadingProxies(false);
        }
    }

 

5.net6的注入和管道:

在net6中,由於頂級語句(Top-Level Program)會極大簡化入口文件的內容和編程方式。以致第一次看到會有些摸不着頭腦。

現在“WebApplication.CreateBuilder()”方法,會創建一個WebApplicationBuilder類型的對象。

此對象中有:

builder.Services - 對應原“ConfigureServices”方法

builder.Configuration - 老版本Ioc進來的配置對象

builder.Environment - 環境對象

 

配置好builder后,build一個WebApplication對象,即可對管道進行配置,一如老版本“Configure方法”

 

6.我們還是把要引入的類庫卸載文件頂部

using Microsoft.EntityFrameworkCore;
using Zodiac.Data.DAL;
using Zodiac.Data.DAL.DbContexts;

在創建Builder后,配置Services

var builder = WebApplication.CreateBuilder(args);

......
  
builder.Services.AddDbContext<UserDbContext>(options => options.UseMySql(builder.Configuration.GetConnectionString("Default"), ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("Default"))));

 7.創建初始Migration

//Visual Studio
Add-Migration InitialCreate

//Net Core CLI
dotnet ef migrations add InitialCreate

執行成功后可以看到生成的migration文件

8.更新migration

//Visual Studio
Update-Database
//Net Core CLI
dotnet ef database update

 

這樣就完成了整個從代碼同步到數據庫的過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM