using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.ApiModel.PF; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.IServices.OP; using APT.MS.Domain.Entities.LR; using APT.MS.Domain.Entities.SK; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace APT.SK.WebApi.Controllers.Api { public class CrossDbContext : DbContext { public DbSet T_SK_BASIC_LIBRARY { get; set; } // 动态连接字符串(外部传入) private readonly string _connString; // 构造函数:动态接收连接字符串 public CrossDbContext(string connString) { _connString = connString; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 使用动态的连接字符串 optionsBuilder.UseSqlServer(_connString); } protected override void OnModelCreating(ModelBuilder modelBuilder) { // 必须把你的实体配置进去,EF才认识它 modelBuilder.Entity() .Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity() .Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); modelBuilder.Entity().Ignore(x => x.Nav_Org) .Ignore(x => x.DbConn) .Ignore(x => x.TaskID); //modelBuilder.Entity() // .Ignore(x => x.departmentCheckedKeys); } /// /// 跨库查询:同服务器,多个库 /// /// 库名列表 /// 跨库合并结果 public List QueryCrossDatabases(string dbName) { List query = null; //foreach (var dbName in databaseNames) { // 核心:动态拼接 库名.dbo.表名 string sql1 = $"SELECT * FROM {dbName}.dbo.T_SK_BASIC_LIBRARY"; var libs = this.Set().FromSqlRaw(sql1).ToList(); string sql2 = $"SELECT * FROM {dbName}.dbo.T_SK_BASIC_LIBRARY_DETAIL"; var libDets = this.Set().FromSqlRaw(sql2).ToList(); string sql3 = $"SELECT * FROM {dbName}.dbo.T_SK_BASIC_LIBRARY_DETAIL_CONTENT"; var libDetConts = this.Set().FromSqlRaw(sql3).ToList(); string sql4 = $"SELECT * FROM {dbName}.dbo.T_SK_BASIC_LIBRARY_DETAIL_CONTENT_BASIC"; var libDetContLaws = this.Set().FromSqlRaw(sql4).ToList(); string sql5 = $"SELECT * FROM {dbName}.dbo.T_SK_BASIC_LIBRARY_DETAIL_CONTENT_HIDDEN"; var libDetContHids = this.Set().FromSqlRaw(sql5).ToList(); var proUnits = GetJTProUnits(dbName); var riskTypes = GetJTRiskTypes(dbName); var libLs = GetJTLibLs(dbName); var libEs = GetJTLibEs(dbName); var libCs = GetJTLibCs(dbName); var laws = GetJTLaws(dbName); var cons = GetJTCons(dbName); var ques = GetJTQues(dbName); if (libs != null && libs.Any()) { foreach (var lib in libs) { lib.Nav_ProductionUnit = proUnits.FirstOrDefault(t => t.ID == lib.PRODUCTION_UNIT_ID); lib.Nav_Type = riskTypes.FirstOrDefault(t => t.ID == lib.TYPE_ID); lib.Nav_SCOREL = libLs.FirstOrDefault(t => t.ID == lib.SCOREL_ID); lib.Nav_SCOREE = libEs.FirstOrDefault(t => t.ID == lib.SCOREE_ID); lib.Nav_SCOREC = libCs.FirstOrDefault(t => t.ID == lib.SCOREC_ID); lib.Nav_Details = libDets.Where(t => t.BASIC_LIBRARY_ID == lib.ID).ToList(); if (lib.Nav_Details != null && lib.Nav_Details.Any()) { foreach (var libDet in lib.Nav_Details) { libDet.Nav_DetailContents = libDetConts.Where(t => t.BASIC_LIBRARY_DETAIL_ID == libDet.ID).ToList(); if (libDet.Nav_DetailContents != null && libDet.Nav_DetailContents.Any()) { foreach (var libDetCon in libDet.Nav_DetailContents) { libDetCon.Nav_Contents = cons.FirstOrDefault(t => t.ID == libDetCon.CHECK_CONTENTS_ID); libDetCon.Nav_DetailBasics = libDetContLaws.Where(t => t.BASIC_LIBRARY_DETAIL_CONTENT_ID == libDetCon.ID).ToList(); if (libDetCon.Nav_DetailBasics != null && libDetCon.Nav_DetailBasics.Any()) { foreach (var bas in libDetCon.Nav_DetailBasics) { bas.Nav_Law = laws.FirstOrDefault(t => t.ID == bas.LAW_ID); } } libDetCon.Nav_DetailHiddens = libDetContHids.Where(t => t.BASIC_LIBRARY_DETAIL_CONTENT_ID == libDetCon.ID).ToList(); if (libDetCon.Nav_DetailHiddens != null && libDetCon.Nav_DetailHiddens.Any()) { foreach (var hid in libDetCon.Nav_DetailHiddens) { hid.Nav_Question = ques.FirstOrDefault(t => t.ID == hid.CHECK_QUESTION_ID); } } } } } } } } query = libs; //query = query == null ? dbSet : query.UnionAll(dbSet); } return query; //return query ?? Enumerable.Empty().AsQueryable(); } public List GetJTProUnits(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_FM_USER_PRODUCTION_UNIT_SET"; var proUnits = this.Set().FromSqlRaw(sql).ToList(); return proUnits; } public List GetJTRiskTypes(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_SK_RISK_TYPE"; var riskTypes = this.Set().FromSqlRaw(sql).ToList(); return riskTypes; } public List GetJTLibLs(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_SK_SCOREL"; var libLs = this.Set().FromSqlRaw(sql).ToList(); return libLs; } public List GetJTLibEs(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_SK_SCOREE"; var libEs = this.Set().FromSqlRaw(sql).ToList(); return libEs; } public List GetJTLibCs(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_SK_SCOREC"; var libCs = this.Set().FromSqlRaw(sql).ToList(); return libCs; } public List GetJTLaws(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_LR_LAW"; var laws = this.Set().FromSqlRaw(sql).ToList(); return laws; } public List GetJTLawTypes(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_LR_LAW_TYPE"; var lawTypes = this.Set().FromSqlRaw(sql).ToList(); return lawTypes; } public List GetJTCons(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_SK_CHECK_CONTENTS"; var cons = this.Set().FromSqlRaw(sql).ToList(); return cons; } public List GetJTQues(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_SK_CHECK_QUESTION"; var ques = this.Set().FromSqlRaw(sql).ToList(); return ques; } public List GetJTBas(string dbName) { string sql = $"SELECT * FROM {dbName}.dbo.T_SK_CHECK_CONTENTS_BASIC"; var ques = this.Set().FromSqlRaw(sql).ToList(); return ques; } } }