namespace MesETL.App.Options; /// /// 多租户分库配置 /// public class TenantDbOptions { public string? TenantKey { get; set; } public string? UseDbGroup { get; set; } /// /// Key-Value: {DbName}-{TenantKeyLessThan} /// public Dictionary? DbGroup { get; set; } public string GetDbNameByTenantKeyValue(int tenantKeyValue) { // var dictionary = new SortedDictionary(); // DbList.ForEach(pair => dictionary.Add(pair.Value, pair.Key)); // 注意配置顺序 if(DbGroup is null) throw new ApplicationException("分库配置中没有发现任何数据库"); #region 性能较低,不使用 // var dbName = DbGroup.Cast?>() // .FirstOrDefault(pair => pair?.Value != null && pair.Value.Value > tenantKeyValue)!.Value.Key; #endregion string? dbName = null; foreach (var (key, value) in DbGroup) { if (value > tenantKeyValue) { dbName = key; break; } } return dbName ?? throw new ArgumentOutOfRangeException(nameof(tenantKeyValue), $"分库配置中没有任何符合'{nameof(tenantKeyValue)}'值的数据库"); } }