using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; using YiSha.Util; namespace YiSha.Data.EF { public class MySqlDbContext : DbContext, IDisposable { private string ConnectionString { get; set; } public MySqlDbContext(string connectionString) { ConnectionString = connectionString; } #region 重载 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql(ConnectionString, p => p.CommandTimeout(GlobalContext.SystemConfig.DBCommandTimeout)); optionsBuilder.AddInterceptors(new DbCommandCustomInterceptor()); } protected override void OnModelCreating(ModelBuilder modelBuilder) { Assembly entityAssembly = Assembly.Load(new AssemblyName("YiSha.Entity")); IEnumerable typesToRegister = entityAssembly.GetTypes().Where(p => !string.IsNullOrEmpty(p.Namespace)) .Where(p => !string.IsNullOrEmpty(p.GetCustomAttribute()?.Name)); foreach (Type type in typesToRegister) { dynamic configurationInstance = Activator.CreateInstance(type); modelBuilder.Model.AddEntityType(type); } foreach (var entity in modelBuilder.Model.GetEntityTypes()) { PrimaryKeyConvention.SetPrimaryKey(modelBuilder, entity.Name); string currentTableName = modelBuilder.Entity(entity.Name).Metadata.GetTableName(); modelBuilder.Entity(entity.Name).ToTable(currentTableName); //var properties = entity.GetProperties(); //foreach (var property in properties) //{ // ColumnConvention.SetColumnName(modelBuilder, entity.Name, property.Name); //} } base.OnModelCreating(modelBuilder); } #endregion } }