EFCore MySql的CodeFirs和数据库迁移

Install-Package MySql.EntityFrameworkCore   //MySql的EFCore 弃用,对最新版的EFCore没有支持
 
Install-Package Install-Package Pomelo.EntityFrameworkCore.MySql  //对EFCore最新版支持  安装在实体层
 
Install-Package Microsoft.EntityFrameworkCore.Tools   //EFCore命令行工具  安装在项目启动层

数据库提供程序参考:

数据库系统 配置示例  NuGet 程序包
SQL Server 或 Azure SQL .UseSqlServer(connectionString)  Microsoft.EntityFrameworkCore.SqlServer
Azure Cosmos DB .UseCosmos(connectionString, databaseName) Microsoft.EntityFrameworkCore.Cosmos
SQLite .UseSqlite(connectionString) Microsoft.EntityFrameworkCore.Sqlite
EF Core 内存中数据库 .UseInMemoryDatabase(databaseName)  Microsoft.EntityFrameworkCore.InMemory
PostgreSQL*   .UseNpgsql(connectionString) Npgsql.EntityFrameworkCore.PostgreSQL
MySQL/MariaDB* .UseMySql(connectionString)   Pomelo.EntityFrameworkCore.MySql
Oracle*  .UseOracle(connectionString)  Oracle.EntityFrameworkCore

CodeFirst

    [Table("student")]
    [Comment("学生信息")]
    public class Student
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Column("id")]
        public long Id { get; set; }
 
        [Required]
        [StringLength(30)]
        [Column("name")]
        [Comment("姓名")]
        public string Name { get; set; }
 
        [Column("age")]
        [Comment("年龄")]
        public int? Age { get; set; }
 
        [Column("sex")]
        [Comment("性别 0=未知,1=男,2=女")]
        public GenderEnum Gender { get; set; }
 
        [Column("email")]
        [StringLength(50)]
        [Comment("邮箱")]
        public string Email { get; set; }
    }
 
    public enum GenderEnum
    {
        UnKnown=0,
        Man=1,
        Woman=2
    }

 创建自己的DbContext和DbContextFactory

    public class DataContext:DbContext
    {
        public DataContext(DbContextOptions options)
            : base(options)
        {
 
        }
 
        public DbSet<Student> Students { get; set; }
    }    
    public class DataContextFactory : IDesignTimeDbContextFactory<DataContext>
    {
        public DataContext CreateDbContext(string[] args)
        {
            var opitonsBulider = new DbContextOptionsBuilder<DataContext>();
            //替换成自己数据库连接字符串
            string connStr = "DataSource=localhost;Initial Catalog=efcore;UserId=root;Password=xxx;Port=3306;CharacterSet=UTF8";
            opitonsBulider.UseMySql(connStr, ServerVersion.AutoDetect(connStr));
            return new DataContext(opitonsBulider.Options);
        }
    }

通过代码生成数据库

Add-Migration InitialCreate /*-OutputDir Your\Directory*/   //创建一个迁移,生成需要创建的表相关脚本,可以选择输出目录,默认在实体层会创建一个Migrations文件夹
 
Update-Database  //执行脚本,正式更新到数据库

 

通过EFCore工具来生成对应的sql脚本,然后到生产环境运行,执行完成后的sql脚本默认会在bin目录下面. 更多参考 :EFCore应用迁移

Script-Migration //根据当前的迁移生成一个最新的数据库脚本
Script-Migration AddNewTables //生成从指定的迁移版本到最新的迁移的差异化脚本
Script-Migration AddNewTables AddAuditTable //生成从一个指定版本到另一个指定版本的迁移脚本
Script-Migration -Idempotent //此类脚本将在内部检查已经应用哪些迁移(通过迁移历史记录表),并且只应用缺少的迁移,幂等SQL脚本

posted @ 2022-07-24 11:19  流氓大菠萝  阅读(233)  评论(0编辑  收藏  举报