mh_jy_safe/APT.MicroApi/APT.SK.WebApi/Controllers/Api/CrossDbContext.cs
2026-03-09 09:40:59 +08:00

74 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}