SqlServerDbContext.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Configuration;
  6. using System.ComponentModel.DataAnnotations.Schema;
  7. using Microsoft.Data.SqlClient;
  8. using Microsoft.EntityFrameworkCore;
  9. using YiSha.Util;
  10. namespace YiSha.Data.EF
  11. {
  12. public class SqlServerDbContext : DbContext, IDisposable
  13. {
  14. private string ConnectionString { get; set; }
  15. #region 构造函数
  16. public SqlServerDbContext(string connectionString)
  17. {
  18. ConnectionString = connectionString;
  19. }
  20. #endregion
  21. #region 重载
  22. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  23. {
  24. optionsBuilder.UseSqlServer(ConnectionString, p => p.CommandTimeout(GlobalContext.SystemConfig.DBCommandTimeout));
  25. optionsBuilder.AddInterceptors(new DbCommandCustomInterceptor());
  26. }
  27. protected override void OnModelCreating(ModelBuilder modelBuilder)
  28. {
  29. Assembly entityAssembly = Assembly.Load(new AssemblyName("YiSha.Entity"));
  30. IEnumerable<Type> typesToRegister = entityAssembly.GetTypes().Where(p => !string.IsNullOrEmpty(p.Namespace))
  31. .Where(p => !string.IsNullOrEmpty(p.GetCustomAttribute<TableAttribute>()?.Name));
  32. foreach (Type type in typesToRegister)
  33. {
  34. dynamic configurationInstance = Activator.CreateInstance(type);
  35. modelBuilder.Model.AddEntityType(type);
  36. }
  37. foreach (var entity in modelBuilder.Model.GetEntityTypes())
  38. {
  39. PrimaryKeyConvention.SetPrimaryKey(modelBuilder, entity.Name);
  40. string currentTableName = modelBuilder.Entity(entity.Name).Metadata.GetTableName();
  41. modelBuilder.Entity(entity.Name).ToTable(currentTableName);
  42. //var properties = entity.GetProperties();
  43. //foreach (var property in properties)
  44. //{
  45. // ColumnConvention.SetColumnName(modelBuilder, entity.Name, property.Name);
  46. //}
  47. }
  48. base.OnModelCreating(modelBuilder);
  49. }
  50. #endregion
  51. }
  52. }