mh_jy_safe/APT.MicroApi/APT.SK.WebApi/Controllers/Api/CrossDbContext.cs

74 lines
2.9 KiB
C#
Raw Normal View History

2026-03-09 09:40:59 +08:00
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.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> 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<T_SK_BASIC_LIBRARY>()
.Ignore(x => x.Nav_Org)
.Ignore(x => x.DbConn)
.Ignore(x => x.TaskID);
//modelBuilder.Entity<OrgRuleDeptCheck>()
// .Ignore(x => x.departmentCheckedKeys);
}
/// <summary>
/// 跨库查询:同服务器,多个库
/// </summary>
/// <param name="databaseNames">库名列表</param>
/// <returns>跨库合并结果</returns>
public IQueryable<T_SK_BASIC_LIBRARY> QueryCrossDatabases(List<string> databaseNames)
{
IQueryable<T_SK_BASIC_LIBRARY>? query = null;
foreach (var dbName in databaseNames)
{
// 核心:动态拼接 库名.dbo.表名
string sql = $"SELECT * FROM {dbName}.dbo.T_SK_BASIC_LIBRARY";
var dbSet = this.Set<T_SK_BASIC_LIBRARY>().FromSqlRaw(sql);
query = dbSet;
//query = query == null ? dbSet : query.UnionAll(dbSet);
}
return query ?? Enumerable.Empty<T_SK_BASIC_LIBRARY>().AsQueryable();
}
/// <summary>
/// 跨库查询:同服务器,多个库,静态数据库连接时直接给库名称
/// </summary>
/// <returns>跨库合并结果</returns>
// ========== 查询方法:直接跨库合并 ==========
public IQueryable<T_SK_BASIC_LIBRARY> GetAllUserInfos()
{
// 查询库B关键直接修改表名同服务器跨库
var dbBUsers = this.Set<T_SK_BASIC_LIBRARY>()
.FromSqlRaw("SELECT * FROM mh_jy_head.dbo.T_SK_BASIC_LIBRARY");
return dbBUsers;
}
}
}