public SchemaBuilder(IServiceProvider serviceProvider, IEntityComparerProvider comparerProvider) { ServiceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); ComparerProvider = comparerProvider ?? throw new ArgumentNullException(nameof(comparerProvider)); Entities = new Dictionary <string, EntityBuilder>(comparerProvider.EntityNameComparer); }
public static List <ICompiledEntity> Range(string[] ids_str, DersaSqlManager M) { List <ICompiledEntity> entities = new List <ICompiledEntity>(); ICompiledEntity[] eArr = new ICompiledEntity[ids_str.Length]; for (int i = 0; i < ids_str.Length; i++) { int entId = int.Parse(ids_str[i]); CachedObjects.CachedEntities[entId] = null; System.Data.DataTable t = M.GetEntity(ids_str[i]); if (t == null) { throw new Exception(string.Format("Table is null for entity {0}", ids_str[i])); } if (t.Rows.Count < 1) { throw new Exception(string.Format("Table is empty for entity {0}", ids_str[i])); } Entity ent = new Entity(t, M); CachedObjects.CachedCompiledInstances[ent.Stereotype.Name + ids_str[i]] = null; ICompiledEntity cInst = (ICompiledEntity)ent.GetCompiledInstance(); eArr[i] = cInst; entities.Add(cInst); } Type sUtilType = Util.GetDynamicType("DersaStereotypes.StereotypeUtil"); //typeof(DersaStereotypes.StereotypeUtil); if (sUtilType == null) { throw new Exception("Class StereotypeUtil not found"); } IEntityComparerProvider CP = System.Activator.CreateInstance(sUtilType) as IEntityComparerProvider; if (CP == null) { throw new Exception("Class StereotypeUtil is not IEntityComparerProvider"); } IComparer <ICompiledEntity> eCmpr = CP.GetEntityComparer(); //entities.Sort(eCmpr); //entities.Sort(new EntityComparer()); //быстрая сортировка иногда дает сбой, т.к. не проверяет все сочетания, заменяем ее на "пузырек" IComparer <ICompiledEntity> cmp = CP.GetEntityComparer(); for (int i = 0; i < eArr.Length; i++) { for (int j = i; j < eArr.Length; j++) { if (cmp.Compare(eArr[i], eArr[j]) > 0) { ICompiledEntity tmp = eArr[i]; eArr[i] = eArr[j]; eArr[j] = tmp; } } } entities.Clear(); for (int i = 0; i < ids_str.Length; i++) { entities.Add(eArr[i]); } return(entities); }