采用的是net Core 3.1框架下的 的WebAPI項目。
1. 創建ASP.NET Core Web項目
2. 添加NuGet引用包,包如下
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tool
Pomelo.EntityFrameworkCore.MySql
3. 創建繼承自DbContext 的DataContext文件
public class DataContext : DbContext { public DbSet<OperateLog> OperateLog { get; set; } public DataContext(DbContextOptions<DataContext> options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //optionsBuilder.UseMySql("Server=localhost;database=omc;uid=root;port=3306;pwd=123321"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { // base.OnModelCreating(modelBuilder); //Model Mapping用這個 // modelBuilder.ApplyConfigurationsFromAssembly(typeof(DataContext).Assembly); //FluentAPI Mapping用這個 modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); } }
4. 創建實體模型 OperateLog , 及實體映射數據庫表的 OperateLogConfig
public class BaseEntity { /// <summary> /// 主鍵Id /// </summary> public long Id { get; set; } /// <summary> /// 創建時間 /// </summary> public DateTime CreateDateTime{get;set;} /// <summary> /// 修改時間 /// </summary> public DateTime? UpdateDateTime { get; set; } /// <summary> /// 軟刪除標志 /// </summary> public bool IsDelete { get; set; } /// <summary> /// 預留字段1 /// </summary> public string ExtFiled1 { get; set; } /// <summary> /// 預留字段2 /// </summary> public string ExtFiled2 { get; set; } } /// <summary> /// 系統用戶操作日志 /// </summary> public class OperateLog : BaseEntity { /// <summary> /// 一級菜單名 /// </summary> public string LevelOneMenuName { get; set; } /// <summary> /// 二級菜單名 /// </summary> public string LevelTwoMenuName { get; set; } /// <summary> /// 三級菜單名 /// </summary> public string LevelThreeeMenuName { get; set; } /// <summary> /// 操作備注 /// </summary> public string OperateRemark { get; set; } /// <summary> /// 操作人Id /// </summary> public long UserId { get; set; } /// <summary> /// 操作人姓名 /// </summary> public string UserName { get; set; } /// <summary> /// 操作結果 /// </summary> public string OperateResult { get; set; } /// <summary> /// 操作結果詳情 /// </summary> public string OperateResultInfo { get; set; } }
public class OperateLogConfig : IEntityTypeConfiguration<OperateLog> { public void Configure(EntityTypeBuilder<OperateLog> builder) { builder.HasComment("系統用戶操作日志表"); builder.Property(t => t.Id).HasComment("主鍵Id"); builder.Property(t => t.LevelOneMenuName).HasComment("一級菜單名").HasMaxLength(50); builder.Property(t => t.LevelTwoMenuName).HasComment("二級菜單名").HasMaxLength(50); builder.Property(t => t.LevelThreeeMenuName).HasComment("三級菜單名").HasMaxLength(50); builder.Property(t => t.OperateRemark).HasComment("操作備注").HasMaxLength(50); builder.Property(t => t.UserId).HasComment("操作人Id").HasMaxLength(50); builder.Property(t => t.UserName).HasComment("操作人姓名").HasMaxLength(50); builder.Property(t => t.OperateResult).HasComment("操作結果").HasMaxLength(50); builder.Property(t => t.OperateResultInfo).HasComment("操作結果詳情").HasMaxLength(50); builder.Property(t => t.CreateDateTime).HasComment("創建時間"); builder.Property(t => t.UpdateDateTime).HasComment("修改時間"); builder.Property(t => t.IsDelete).HasComment("軟刪除標志 ,true表示刪除,false表示未刪除").HasDefaultValue(false); builder.Property(t => t.ExtFiled1).HasComment("預留擴展字段1").HasMaxLength(50); builder.Property(t => t.ExtFiled2).HasComment("預留擴展字段2").HasMaxLength(50); } }
5. 在Startup 文件中的ConfigureServices方法中, 配置Mysql 的連接服務
public void ConfigureServices(IServiceCollection services) { var connection = "Server=localhost;database=omc;uid=root;port=3306;pwd=123321"; services.AddDbContext<DataContext>(options => options.UseMySql(connection)); services.AddControllers(); }
sqlserver的連接字符串是這樣
Server="服務器名稱;User Id=數據庫登錄名;Password=密碼;Database=數據庫名稱
6. 打開程序包管理控制台, 輸入PM 命令,即可得到想要的結果
Add-Migration EFCore
該命令會在程序中自動生成所需的對應數據庫的腳本文件,截圖如下
update-database EFCore
則會執行上圖中的Migrations中的程序文件,會在所連接的數據庫中生成對應的表結構,截圖如下