using AgileConfig.Server.Common; using AgileConfig.Server.Data.Entity; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Reflection; using System.Text; namespace AgileConfig.Server.Data.Repository { public class AgileConfigDbContext : SqlContext { public DbSet Apps { get; set; } public DbSet Configs { get; set; } public DbSet ServerNodes { get; set; } public DbSet ModifyLogs { get; set; } public DbSet Settings { get; set; } public DbSet SysLogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { var dbProvider = Configuration.Config["db:provider"]; FixColumnsDataType(modelBuilder, dbProvider); FixColumnsDataType(modelBuilder, dbProvider); FixColumnsDataType(modelBuilder, dbProvider); FixColumnsDataType(modelBuilder, dbProvider); FixColumnsDataType(modelBuilder, dbProvider); FixColumnsDataType(modelBuilder, dbProvider); base.OnModelCreating(modelBuilder); } /// /// 修复字段跟数据库字段对应关系,因为不同的数据库有些差异 /// /// /// /// private void FixColumnsDataType(ModelBuilder modelBuilder, string dbProvider) where T : class { var props = typeof(T).GetProperties(); foreach (var item in props) { if (item.PropertyType == typeof(string)) { modelBuilder.Entity(builer => { var att = item.GetCustomAttributes().FirstOrDefault(att => att.GetType() == typeof(ColumnAttribute)); if (att != null) { var columnAtt = att as ColumnAttribute; var type = columnAtt.TypeName; if (!string.IsNullOrEmpty(type)) { if (dbProvider == "npgsql") { //npgsql没有nvarcahr builer.Property(item.Name).HasColumnType(type.Replace("nvarchar", "varchar")); } //if sqlserver //if sqlite //if mysql } } }); } } } } }