/// <summary> /// </summary> /// <param name="schema"></param> public SelectionBuilderGenerator(SchemaDescription schema) { Schema = schema; }
/// <summary> /// </summary> /// <param name="schema"></param> public ContractClassGenerator(SchemaDescription schema) { Schema = schema; }
/// <summary> /// </summary> /// <param name="filename"></param> /// <returns></returns> private Task<SchemaDescription> GenerateSchema(string filename) { return Task.Run(() => { var builder = BuildConnectionString(); var schema = new SchemaDescription{ Database = new Database(), Tables = new List<Table>() }; using (var connection = new SqlConnection(builder.ConnectionString)) { SchemaDescription previousSchema = null; var generateDeviceId = Settings.Default.GenerateDeviceId; var names = cblTables.CheckedItems; connection.Open(); foreach (var name in names) { DataTable keys; var dbName = string.Empty; var file = new FileInfo(filename); var table = new Table(); var tableInfo = _tables.Select(string.Format("TABLE_NAME = '{0}'", name)).First(); cbDatabase.Invoke(() => { dbName = cbDatabase.Text; }); var columns = connection.GetSchema("Columns", new[]{ dbName, null, name.ToString() }).Select(); if (tableInfo == null || !columns.Any()) { continue; } if (file.Exists) { previousSchema = JsonConvert.DeserializeObject<SchemaDescription>(File.ReadAllText(filename)); schema.Database = previousSchema.Database; } else { schema.Database.Name = Path.GetFileNameWithoutExtension(file.Name); } schema.Database.ClassesPrefix = dbName; schema.Database.HasDTO = true; table.Name = name.ToString(); table.Fields = new List<Field>(); var sql = string.Format("SELECT * FROM [{0}].[{1}]", tableInfo["TABLE_SCHEMA"], name); var command = new SqlCommand{ Connection = connection, CommandText = sql }; using (var reader = command.ExecuteReader(CommandBehavior.KeyInfo)) { keys = reader.GetSchemaTable(); } if (generateDeviceId) { var deviceId = new Field{ IsId = true, IsNullable = false, Name = "DeviceId", Type = "long" }; table.Fields.Add(deviceId); } foreach (var column in columns) { if (keys == null) { break; } var columnName = column["COLUMN_NAME"]; var isNullable = column["IS_NULLABLE"].ToString(); //var indexes = connection.GetSchema("IndexColumns", new[]{ // dbName, null, name.ToString(), null, columnName.ToString() //}).Select(); //foreach (var index in indexes) { // if (keys == null) { // break; // } // var row = keys.Select(string.Format("ColumnName = '{0}'", // columnName) ).First(); var isIdentity = // Convert.ToBoolean(row["IsIdentity"]); var isKey = // Convert.ToBoolean(row["IsKey"]); // field.IsId = isKey || isIdentity; field.IsUnique = // Convert.ToBoolean(row["IsUnique"]); //} var row = keys.Select(string.Format("ColumnName = '{0}'", columnName)).First(); var isIdentity = Convert.ToBoolean(row["IsIdentity"]); var isKey = Convert.ToBoolean(row["IsKey"]); var field = new Field{ IsId = !generateDeviceId && (isKey || isIdentity), IsIndex = generateDeviceId && (isKey || isIdentity), IsNullable = isNullable == "YES", IsUnique = (generateDeviceId && (isKey || isIdentity)) || Convert.ToBoolean(row["IsUnique"]), Name = column["COLUMN_NAME"].ToString(), Type = column["DATA_TYPE"].ToString() }; field.ConvertSqlDataType(); table.Fields.Add(field); } schema.Tables.Add(table); } if (previousSchema != null && ShowQuestionMessageBox(Resources.UpgradeJsonFile) == DialogResult.Yes) { var tables = schema.Tables; var previousTables = previousSchema.Tables; var except = tables.Except(previousTables, Table.TableComparer).ToList(); var intersect = tables.Intersect(previousTables, Table.TableComparer).ToList(); var versionIncreased = false; if (intersect.Count > 0) { foreach (var table in intersect) { var previous = (from x in previousTables where x.Equals(table) select x).SingleOrDefault(); if (previous != null) { table.Joins = previous.Joins; } } foreach (var fields in from table in intersect let previous = (from x in previousTables where x.Equals(table) select x).SingleOrDefault() where previous != null select table.Fields.Except(previous.Fields, Field.FieldComparer) .ToList()) { if (fields.Count > 0 && !versionIncreased) { schema.Database.Version += 1; versionIncreased = true; } fields.ForEach(x => x.Version = schema.Database.Version); } } if (except.Count > 0) { if (!versionIncreased) { schema.Database.Version += 1; } except.ForEach(x => x.Version = schema.Database.Version); } } } return schema; }); }
/// <summary> /// </summary> /// <param name="schema"></param> public MetaDataGenerator(SchemaDescription schema) { Schema = schema; }
/// <summary> /// </summary> /// <param name="schema"></param> public DataTransferObjectGenerator(SchemaDescription schema) { Schema = schema; }
/// <summary> /// </summary> /// <param name="schema"></param> public ProviderClassGenerator(SchemaDescription schema) { Schema = schema; }
/// <summary> /// </summary> /// <param name="schema"></param> public UriTypeGenerator(SchemaDescription schema) { Schema = schema; }
/// <summary> /// </summary> /// <param name="schema"></param> public DatabaseHelperGenerator(SchemaDescription schema) { Schema = schema; }
/// <summary> /// </summary> /// <param name="filename"></param> /// <returns></returns> private Task <SchemaDescription> GenerateSchema(string filename) { return(Task.Run(() => { var builder = BuildConnectionString(); var schema = new SchemaDescription { Database = new Database(), Tables = new List <Table>() }; using (var connection = new SqlConnection(builder.ConnectionString)) { SchemaDescription previousSchema = null; var generateDeviceId = Settings.Default.GenerateDeviceId; var names = cblTables.CheckedItems; connection.Open(); foreach (var name in names) { DataTable keys; var dbName = string.Empty; var file = new FileInfo(filename); var table = new Table(); var tableInfo = _tables.Select(string.Format("TABLE_NAME = '{0}'", name)).First(); cbDatabase.Invoke(() => { dbName = cbDatabase.Text; }); var columns = connection.GetSchema("Columns", new[] { dbName, null, name.ToString() }).Select(); if (tableInfo == null || !columns.Any()) { continue; } if (file.Exists) { previousSchema = JsonConvert.DeserializeObject <SchemaDescription>(File.ReadAllText(filename)); schema.Database = previousSchema.Database; } else { schema.Database.Name = Path.GetFileNameWithoutExtension(file.Name); } schema.Database.ClassesPrefix = dbName; schema.Database.HasDTO = true; table.Name = name.ToString(); table.Fields = new List <Field>(); var sql = string.Format("SELECT * FROM [{0}].[{1}]", tableInfo["TABLE_SCHEMA"], name); var command = new SqlCommand { Connection = connection, CommandText = sql }; using (var reader = command.ExecuteReader(CommandBehavior.KeyInfo)) { keys = reader.GetSchemaTable(); } if (generateDeviceId) { var deviceId = new Field { IsId = true, IsNullable = false, Name = "DeviceId", Type = "long" }; table.Fields.Add(deviceId); } foreach (var column in columns) { if (keys == null) { break; } var columnName = column["COLUMN_NAME"]; var isNullable = column["IS_NULLABLE"].ToString(); //var indexes = connection.GetSchema("IndexColumns", new[]{ // dbName, null, name.ToString(), null, columnName.ToString() //}).Select(); //foreach (var index in indexes) { // if (keys == null) { // break; // } // var row = keys.Select(string.Format("ColumnName = '{0}'", // columnName) ).First(); var isIdentity = // Convert.ToBoolean(row["IsIdentity"]); var isKey = // Convert.ToBoolean(row["IsKey"]); // field.IsId = isKey || isIdentity; field.IsUnique = // Convert.ToBoolean(row["IsUnique"]); //} var row = keys.Select(string.Format("ColumnName = '{0}'", columnName)).First(); var isIdentity = Convert.ToBoolean(row["IsIdentity"]); var isKey = Convert.ToBoolean(row["IsKey"]); var field = new Field { IsId = !generateDeviceId && (isKey || isIdentity), IsIndex = generateDeviceId && (isKey || isIdentity), IsNullable = isNullable == "YES", IsUnique = (generateDeviceId && (isKey || isIdentity)) || Convert.ToBoolean(row["IsUnique"]), Name = column["COLUMN_NAME"].ToString(), Type = column["DATA_TYPE"].ToString() }; field.ConvertSqlDataType(); table.Fields.Add(field); } schema.Tables.Add(table); } if (previousSchema != null && ShowQuestionMessageBox(Resources.UpgradeJsonFile) == DialogResult.Yes) { var tables = schema.Tables; var previousTables = previousSchema.Tables; var except = tables.Except(previousTables, Table.TableComparer).ToList(); var intersect = tables.Intersect(previousTables, Table.TableComparer).ToList(); var versionIncreased = false; if (intersect.Count > 0) { foreach (var table in intersect) { var previous = (from x in previousTables where x.Equals(table) select x).SingleOrDefault(); if (previous != null) { table.Joins = previous.Joins; } } foreach (var fields in from table in intersect let previous = (from x in previousTables where x.Equals(table) select x).SingleOrDefault() where previous != null select table.Fields.Except(previous.Fields, Field.FieldComparer) .ToList()) { if (fields.Count > 0 && !versionIncreased) { schema.Database.Version += 1; versionIncreased = true; } fields.ForEach(x => x.Version = schema.Database.Version); } } if (except.Count > 0) { if (!versionIncreased) { schema.Database.Version += 1; } except.ForEach(x => x.Version = schema.Database.Version); } } } return schema; })); }