internal static void Collect() { lock (__Lock) { // Schemas __Schemas = Reflector .CollectAttributedObject <Table, IEntity>(); // TableIndex __TableIndex = new Dictionary <string, int>(); foreach (var schema in __Schemas) { __Index++; __TableIndex.Add( schema.Key, __Index ); } // Tables __Tables = new Dictionary <string, Table>(); foreach (var schema in __Schemas) { var type = schema.Value.GetType(); var table = new Table() { EntityName = schema.Value.__EntityName, TableName = schema.Value.__TableName, Category = type.GetCategory(), Description = type.GetDescription(), Indexes = schema.Value.__Indexes, IsView = type.HasAttribute <View>(), Follow = type.GetAttribute <DiffFollow>(), }; __Tables.Add(schema.Key, table); } // Columns __Columns = new Dictionary <string, List <Column> >(); foreach (var schema in __Schemas) { var columns = new List <Column>(); var type = schema.Value.GetType(); var infos = type.GetProperties(); foreach (var info in infos) { var column = info.GetAttribute <Column>(); if (null == column) { continue; } // if (column.ColumnName.IsNullOrEmpty()) { column.ColumnName = SqlConvention .ToColumnName(type, info); } column.Property = info; column.TableName = schema.Value.__TableName; column.EntityName = schema.Value.__EntityName; column.AllowDBNull = info.HasAttribute <AllowDBNull>(); column.Identity = info.HasAttribute <Identity>(); column.PrimaryKey = info.HasAttribute <PrimaryKey>(); column.ReadOnly = info.HasAttribute <ReadOnly>(); column.Unique = info.HasAttribute <Unique>(); column.IgnoreDifference = info.HasAttribute <DiffIgnore>(); var order = info.GetAttribute <Order>(); column.Order = null == order ? int.MaxValue : order.Index; var maxLength = info.GetAttribute <MaxLength>(); if (null != maxLength) { column.MaxLength = maxLength.Size; } column.Category = info.GetCategory(); column.Description = info.GetDescription(); column.DefaultValue = info.GetDefaultValue(); columns.Add(column); } columns.OrderBy(x => x.Order); __Columns.Add(schema.Key, columns); } __Collected = true; } // __FlatSchema __FlatSchema = new Dictionary <string, IEntity>(); __FlatColumns = new Dictionary <string, List <Column> >(); foreach (var schema in __Schemas) { var value = schema.Value; // __FlatSchema.SafeAdd( value.GetType().FullName.ToUpper(), value ); __FlatSchema.SafeAdd( value.__EntityName.ToUpper(), value ); __FlatSchema.SafeAdd( value.__TableName.ToUpper(), value ); __FlatSchema.SafeAdd( value.__Alias.ToUpper(), value ); // List <Column> columns = __Columns[schema.Key]; __FlatColumns.SafeAdd( value.GetType().FullName.ToUpper(), columns ); __FlatColumns.SafeAdd( value.__EntityName.ToUpper(), columns ); __FlatColumns.SafeAdd( value.__TableName.ToUpper(), columns ); __FlatColumns.SafeAdd( value.__Alias.ToUpper(), columns ); } // __FlatTable __FlatTable = new Dictionary <string, Table>(); foreach (var tableKV in __Tables) { var schema = __FlatSchema[tableKV.Key.ToUpper()]; __FlatTable.SafeAdd( schema.GetType().FullName.ToUpper(), tableKV.Value ); __FlatTable.SafeAdd( schema.__EntityName.ToUpper(), tableKV.Value ); __FlatTable.SafeAdd( schema.__TableName.ToUpper(), tableKV.Value ); __FlatTable.SafeAdd( schema.__Alias.ToUpper(), tableKV.Value ); } // __FlatColumn __FlatColumn = new Dictionary <string, Column>(); foreach (var columnsKV in __Columns) { foreach (var one in columnsKV.Value) { __FlatColumn.Add(one.Alias, one); } } }