public static SchemaMetadata MappingDatabaseMetadataEntities(this IEnumerable <object> rawMetadata) { IEnumerable <dynamic> rawMetadataEntities = rawMetadata.Cast <dynamic>(); var result = new SchemaMetadata() { Name = rawMetadataEntities.First().TABLE_CATALOG }; foreach (var dbObject in rawMetadataEntities.GroupBy(g => g.TABLE_NAME).Select(s => new { Name = s.Key as string, PropertiesMetadata = s.ToList() })) { var metadataObject = new SchemaObjectMetadata() { Name = dbObject.Name }; foreach (var dbProperty in dbObject.PropertiesMetadata.GroupBy(g => g.COLUMN_NAME).Select(S => new { ColumnName = S.Key, columnMetadata = S.ToList() })) { var generalColumnMetadata = dbProperty.columnMetadata.First(); var FKName = dbProperty.columnMetadata.Where(w => w.IS_FK == 1).Select(s => (string)s.CONSTRAINT_NAME).FirstOrDefault(); var property = new SchemaPropertyMetadata() { Name = dbProperty.ColumnName, IsNullable = generalColumnMetadata.IS_NULLABLE == 1, PropertyType = generalColumnMetadata.DATA_TYPE, DefaultValue = generalColumnMetadata.COLUMN_DEFAULT, IsForeingKey = !string.IsNullOrEmpty(FKName), FKName = FKName, IsUnique = dbProperty.columnMetadata.Where(w => w.IS_UNIQUE == 1).Count() > 0, IsKey = dbProperty.columnMetadata.Where(w => w.IS_KEY == 1).Count() > 0, MaxCharacterLength = generalColumnMetadata.CHARACTER_MAXIMUM_LENGTH, NumericPrecision = generalColumnMetadata.NUMERIC_PRECISION, NumericScale = generalColumnMetadata.NUMERIC_SCALE }; metadataObject.DatabaseObjectProperties.Add(property); if (property.IsForeingKey) { metadataObject.HasDependency = true; } } result.DatabaseObjects.Add(metadataObject); } return(result); }
private async Task <MockObjectData> GenerateMockDataByMetadataSchemaAndDependenciesData(SchemaObjectMetadata schemaObjectMetadata, MockDataGeneratorOptions options, IEnumerable <MockObjectData> mockDataCreated, List <SchemaObjectDependencyMedatada> dependencyMetadatas) { var propertyGenerator = new SqlServerMockPropertiesValueGenerator(); var dependencies = dependencyMetadatas?.Where(w => w.DependentObjectName.Equals(schemaObjectMetadata.Name)); var dependencyData = mockDataCreated?.SelectMany(s => s.propertyValues.Where(w => dependencies?.Where(ww => ww.PrimaryObjectName.Equals(s.Schema.Name) && ww.PrimaryObjectPropertyName.Equals(w.PropertyName)) .Any() ?? false)); var values = schemaObjectMetadata.DatabaseObjectProperties .Select( s => { MockDataPropertyValues foreingKeyData = null; if (s.IsForeingKey) { var dependency = dependencies.Where(w => w.DependentObjectPropertyName.Equals(s.Name)).FirstOrDefault(); foreingKeyData = dependencyData?.Where(w => w.PropertyName.Equals(dependency?.PrimaryObjectPropertyName)).FirstOrDefault(); } return(propertyGenerator.GenerateMockedValuesByPropertyMetadata(s, options, foreingKeyData)); } ).ToArray(); return(await Task.Run(() => new MockObjectData() { Schema = schemaObjectMetadata, propertyValues = values })); }