74 lines
2.9 KiB
C#
74 lines
2.9 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|