用EFCore的 FluentAPI 方式生成MySql 帶注釋的數據庫表結構


采用的是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中的程序文件,會在所連接的數據庫中生成對應的表結構,截圖如下

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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