public IConfigInit AddPhysicTable <TEntity>(string physicTableName, string groupName = "BaseDbGroup") { var absEntityType = typeof(TEntity); _lock.EnterReadLock(); bool exists = _physicTables.Any(x => x.AbsTableName == absEntityType.Name && x.GroupName == groupName && x.PhysicTableName == physicTableName); _lock.ExitReadLock(); if (exists) { return(this); } _lock.EnterWriteLock(); _physicTables.Add(new PhysicTable { AbsTableName = absEntityType.Name, GroupName = groupName, PhysicTableName = physicTableName }); _lock.ExitWriteLock(); var physicEntityType = ShardingHelper.MapTable(absEntityType, physicTableName); DbModelFactory.AddEntityType(physicTableName, physicEntityType); return(this); }
public List <(string tableName, string conString, DatabaseType dbType)> GetReadTables(string absTableName, string absDbName, IQueryable source) { var rule = GetShardingRule(absDbName, absTableName); var allTables = GetTargetTables(absTableName, ReadWriteType.Read, absDbName); var allTableNames = allTables.Select(x => x.tableName).ToList(); var findTables = ShardingHelper.FilterTable(source, allTableNames, rule); allTables = allTables.Where(x => findTables.Contains(x.tableName)).ToList(); #if DEBUG Console.WriteLine($"查询分表:{string.Join(",", findTables)}"); #endif return(allTables); }