使用C# Entity Framework Core連接MySQL

這次來整理關於C# Entity framework 搭配Mysql 資料庫的一些使用方式:

1.  先安裝以下套件

 

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Pomelo.EntityFrameworkCore.MySql

 

2. 建立Dbcontext的模型

 

 public class RonWebDbContext: DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
        	// 配置連線
            string connectionString = "連線字串";
            optionsBuilder.UseMySql(connectionString, new MySqlServerVersion(new Version(8, 0, 33)),
            options => options.EnableRetryOnFailure());
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
        	// 配置雙主鍵
            modelBuilder.Entity<RefreshTokenLog>()
                .HasKey(a => new { a.RefreshToken, a.UserId });
        }
		
		// 資料庫每一張表
        public DbSet<UserMain> UserMain { get; set; }
        public DbSet<RefreshTokenLog> RefreshTokenLog { get; set; }
        
    }

 

3. 雙主鍵表及關連表範例

 

    public class RefreshTokenLog
    {
        /// <summary>
        /// RefreshToken
        /// </summary>
        [Key]
        public string RefreshToken { get; set; } = string.Empty;
        
        [Key]
        public long UserId { get; set; }
        
        /// 關連表
        [ForeignKey("UserId")]
        public virtual UserMain? UserMain { get; set; }
        
        [Required]
        public DateTime ExpirationDate { get; set; }
        
        [Required]
        public DateTime CreateDate { get; set; }
    }

 

4. 自動增值表範例

 

    public class UserMain
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long UserId { get; set; }

        [Required]
        [StringLength(50)]
        public string Account { get; set; } = string.Empty;

        [Required]
        public string Password { get; set; } = string.Empty;

        [Required]
        [StringLength(20)]
        public string UserName { get; set; } = string.Empty;

        [StringLength(250)]
        [Required]
        public string? Email { get; set; }

        [Required]
        public DateTime CreateDate { get; set;}

        public DateTime? UpdateDate { get; set; }
    }

 

 5. 透過指令來先製作遷移檔

 

 dotnet ef migrations add "更新說明"

 

6. 更新資料庫

 

dotnet ef database update

 

如果有環境變數需求

 

環境變數連線字串名稱="連線字串" dotnet ef database update

 

連線字串的範例如下

 

"server=$host;port=$port;user id=$user;password=$pwd;database=$db;charset=utf8;"

 

 以上就為建立C#及Mysql資料庫的整個流程

 

後續使用就跟EntityFramework操作方式相同

using (var db = new RonWebDbContext())
{
	var data = new RefreshTokenLog()
    {
        RefreshToken = "RefreshToken",
    	UserId = 1,
        ExpirationDate = DateTime.Now,
        CreateDate = DateTime.Now
    };
    await db.RefreshTokenLog.AddAsync(data);
    await db.SaveChangesAsync();
}

 

遠端備份sql

$ 為變數,注意$pwd得地方不能有間隔

echo mysqldump -h $host --port $port -u $user -p$pwd --databases $db > backup_$(date +"%Y%m%d_%H%M%S")_$backupName.sql

 

Copyright © 2025 - All right reserved