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脚本