You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.3 KiB
93 lines
3.3 KiB
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyModel;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Runtime.Loader;
|
|
using System.Text;
|
|
using VOL.Core.Extensions;
|
|
|
|
namespace VOL.Core.EFDbContext
|
|
{
|
|
public abstract class BaseDbContext : DbContext
|
|
{
|
|
protected abstract string ConnectionString { get; }
|
|
|
|
public bool QueryTracking
|
|
{
|
|
set
|
|
{
|
|
this.ChangeTracker.QueryTrackingBehavior = value ? QueryTrackingBehavior.TrackAll : QueryTrackingBehavior.NoTracking;
|
|
}
|
|
}
|
|
public BaseDbContext() : base() { }
|
|
public BaseDbContext(DbContextOptions<BaseDbContext> options) : base(options) { }
|
|
|
|
protected void UseDbType(DbContextOptionsBuilder optionsBuilder,string connectionString,Enums.DbCurrentType type= Enums.DbCurrentType.Default)
|
|
{
|
|
if (type == Enums.DbCurrentType.Default)
|
|
{
|
|
if (Const.DBType.Name == Enums.DbCurrentType.MySql.ToString())
|
|
{
|
|
//optionsBuilder.UseMySql(connectionString);
|
|
optionsBuilder.UseMySql(connectionString, new MySqlServerVersion(new Version(8, 0, 11)));
|
|
}
|
|
else if (Const.DBType.Name == Enums.DbCurrentType.PgSql.ToString())
|
|
{
|
|
optionsBuilder.UseNpgsql(connectionString);
|
|
}
|
|
else
|
|
{
|
|
optionsBuilder.UseSqlServer(connectionString);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (type == Enums.DbCurrentType.MySql)
|
|
{
|
|
optionsBuilder.UseMySql(connectionString, new MySqlServerVersion(new Version(8, 0, 11)));
|
|
}
|
|
else if (type == Enums.DbCurrentType.PgSql)
|
|
{
|
|
optionsBuilder.UseNpgsql(connectionString);
|
|
}
|
|
else
|
|
{
|
|
optionsBuilder.UseSqlServer(connectionString);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
protected void OnModelCreating(ModelBuilder modelBuilder, Type type)
|
|
{
|
|
try
|
|
{
|
|
//获取所有类库
|
|
var compilationLibrary = DependencyContext
|
|
.Default
|
|
.CompileLibraries
|
|
.Where(x => !x.Serviceable && x.Type != "package" && x.Type == "project");
|
|
foreach (var _compilation in compilationLibrary)
|
|
{
|
|
//加载指定类
|
|
AssemblyLoadContext.Default
|
|
.LoadFromAssemblyName(new AssemblyName(_compilation.Name))
|
|
.GetTypes().Where(x => x.GetTypeInfo().BaseType != null
|
|
&& x.BaseType == (type)).ToList()
|
|
.ForEach(t => { modelBuilder.Entity(t); });
|
|
}
|
|
base.OnModelCreating(modelBuilder);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string mapPath = ($"Log/").MapPath();
|
|
Utilities.FileHelper.WriteFile(mapPath, $"syslog_{DateTime.Now.ToString("yyyyMMddHHmmss")}.txt", ex.Message + ex.StackTrace + ex.Source);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|