/// <summary>为时间计算分表分库</summary> /// <param name="time"></param> /// <returns></returns> public virtual ShardModel Get(DateTime time) { var fi = Field; if (fi == null) { throw new XCodeException("分表策略要求指定时间字段!"); } if (ConnPolicy.IsNullOrEmpty() && TablePolicy.IsNullOrEmpty()) { return(null); } var table = fi.Factory.Table; var model = new ShardModel(); if (!ConnPolicy.IsNullOrEmpty()) { model.ConnName = String.Format(ConnPolicy, table.ConnName, time); } if (!TablePolicy.IsNullOrEmpty()) { model.TableName = String.Format(TablePolicy, table.TableName, time); } return(model); }
private ShardModel[] GetModels(DateTime start, DateTime end) { var models = new List <ShardModel>(); // 构建了一个时间区间 start <= @fi < end // 简单起见,按照分钟步进 ShardModel last = null; for (var dt = start; dt < end; dt = dt.Add(Step)) { var model = Get(dt); if (last == null || model.ConnName != last.ConnName || model.TableName != last.TableName) { models.Add(model); last = model; } } return(models.ToArray()); }