using System; using System.Collections.Generic; using System.Linq; using System.Text; using SqlSugar; namespace OrmTest { public class CrossDatabase04 { public static void Init() { var db = new SqlSugarClient(new List() { new ConnectionConfig(){ConfigId="A",DbType=DbType.Sqlite,ConnectionString="DataSource=/A_DB.sqlite",IsAutoCloseConnection=true, ConfigureExternalServices=new ConfigureExternalServices(){ EntityNameService=(x,y)=>{ y.DbTableName=y.DbTableName.ToLower(); }, EntityService=(x,y)=>{ y.DbColumnName=y.DbColumnName?.ToLower(); } } }, new ConnectionConfig(){ConfigId="B",DbType=DbType.Sqlite,ConnectionString="DataSource=/B_DB.sqlite",IsAutoCloseConnection=true, ConfigureExternalServices=new ConfigureExternalServices(){ EntityNameService=(x,y)=>{ y.DbTableName=y.DbTableName.ToUpper(); }, EntityService=(x,y)=>{ y.DbColumnName=y.DbColumnName?.ToUpper(); } }}, new ConnectionConfig(){ConfigId="AB",DbType=DbType.Sqlite,ConnectionString="DataSource=/AB_DB.sqlite",IsAutoCloseConnection=true } }); db.GetConnection("A").Aop.OnLogExecuting = db.GetConnection("B").Aop.OnLogExecuting = db.GetConnection("AB").Aop.OnLogExecuting = (s, p) => { Console.WriteLine(s); }; db.GetConnection("A").CodeFirst.InitTables(); db.GetConnection("B").CodeFirst.InitTables(); db.GetConnection("AB").CodeFirst.InitTables(); db.GetConnection("A").DbMaintenance.TruncateTable(); db.GetConnection("B").DbMaintenance.TruncateTable(); db.GetConnection("AB").DbMaintenance.TruncateTable(); db.GetConnection("A").Insertable(new OperatorInfo() { id = 10, realname = "A" }).ExecuteCommand(); db.GetConnection("B").Insertable(new Role() { id = 101, name = "B" }).ExecuteCommand(); db.GetConnection("AB").Insertable(new OptRole() { Id = 1, OperId = 10, RoleId = 101 }).ExecuteCommand(); var x = db.GetConnection("A").Queryable() .CrossQuery(typeof(Role),"B") .CrossQuery(typeof(OptRole), "AB") .Includes(z => z.Roles.Where(it=>it.id==1).ToList()).ToList(); } /// /// 描述: /// 作者:synjones /// 时间:2022-04-20 21:30:28 /// [SugarTable("unit_operatorinfo213")] [Tenant("A")] public partial class OperatorInfo { /// /// 主键 /// [SugarColumn(IsPrimaryKey = true)] public int id { get; set; } /// /// 姓名 /// public string realname { get; set; } /// /// 多角色 /// [Navigate(typeof(OptRole), nameof(OptRole.OperId), nameof(OptRole.RoleId))]//名字换 public List Roles { get; set; } } /// /// 描述: /// 作者:synjones /// 时间:2022-04-20 21:30:28 /// [SugarTable("unit_role112313")] [Tenant("B")] public partial class Role { /// /// 角色 /// [SugarColumn(IsPrimaryKey = true)] public int id { get; set; } /// /// 角色名称 /// public string name { get; set; } } /// /// 描述: /// 作者:synjones /// 时间:2022-04-21 14:35:09 /// [SugarTable("Unit_Operator_Role123131")] [Tenant("AB")] public partial class OptRole { /// /// /// [SugarColumn(IsPrimaryKey = true)] public int Id { get; set; } /// /// /// public int OperId { get; set; } /// /// /// public int RoleId { get; set; } } } }