private void FieldName(MetaSqlSchema[] dataList, string schemaName, string schemaNameCSharp, string tableName, string tableNameCSharp) { MetaSqlSchema[] fieldList = dataList.Where(item => item.SchemaName == schemaName && item.TableName == tableName).ToArray(); List <string> nameExceptList = new List <string>(); nameExceptList.Add(tableName); // CSharp propery can not have same name like class. foreach (MetaSqlSchema field in fieldList) { string fieldNameCSharp = UtilGenerate.NameCSharp(field.FieldName, nameExceptList); FrameworkTypeEnum frameworkTypeEnum = UtilDalType.SqlTypeToFrameworkTypeEnum(field.SqlType); List.Add(new MetaCSharpSchema() { Schema = field, SchemaNameCSharp = schemaNameCSharp, TableNameCSharp = tableNameCSharp, FieldNameCSharp = fieldNameCSharp, IsPrimaryKey = field.IsPrimaryKey, FrameworkTypeEnum = frameworkTypeEnum, }); } }
/// <summary> /// Resedd sql table for Integrate. /// </summary> private void IntegrateReseed(List <UpsertItem> upsertList, int?reseed, List <Assembly> assemblyList) { if (reseed != null) { foreach (var item in upsertList) { if (item.IsDeploy == false) { Type typeRowDest = item.TypeRowDest(assemblyList); UtilDalType.TypeRowToTableNameSql(typeRowDest, out string schemaNameSql, out string tableNameSql); string tableNameWithSchemaSql = UtilDalType.TableNameWithSchemaSql(schemaNameSql, tableNameSql); bool isFrameworkDb = UtilDalType.TypeRowIsFrameworkDb(item.TypeRow); var paramList = new List <(FrameworkTypeEnum FrameworkTypeEnum, SqlParameter SqlParameter)>(); string paramNameTableNameCSharp = Data.ExecuteParamAdd(FrameworkTypeEnum.Nvarcahr, tableNameWithSchemaSql, paramList); string paramNameReseed = Data.ExecuteParamAdd(FrameworkTypeEnum.Bigint, (long)reseed, paramList); string sql = string.Format("DBCC checkident ({0}, reseed, {1})", paramNameTableNameCSharp, paramNameReseed); Data.ExecuteNonQueryAsync(sql, paramList, isFrameworkDb).Wait(); } } } }
private static void GenerateCSharpNameEnum(GenerateIntegrateItem integrate, StringBuilder result) { var fieldList = UtilDalType.TypeRowToFieldList(integrate.TypeRow); var fieldId = fieldList.SingleOrDefault(item => item.FieldNameCSharp == "Id"); // See also FieldIntegrate.IsKey var fieldIdName = fieldList.SingleOrDefault(item => item.FieldNameCSharp == "IdName"); // See also FieldIntegrate.IsKey if (fieldIdName != null) { result.Append(string.Format(" public enum IdNameEnum {{ [IdNameEnum(null)]None = 0")); List <string> nameExceptList = new List <string>(); int count = 0; foreach (Row row in integrate.RowList) { count += 1; string idName = (string)fieldIdName.PropertyInfo.GetValue(row); string nameCSharp = UtilGenerate.NameCSharp(idName, nameExceptList); result.Append(string.Format(", [IdNameEnum(\"{0}\")]{1} = {2}", idName, nameCSharp, count)); } result.AppendLine(string.Format(" }}")); result.AppendLine(); result.AppendLine(string.Format(" public static {0} Row(this IdNameEnum value)", integrate.TableNameCSharp)); result.AppendLine(string.Format(" {{")); result.AppendLine(string.Format(" return RowList.Where(item => item.IdName == IdNameEnumAttribute.IdNameFromEnum(value)).SingleOrDefault();")); result.AppendLine(string.Format(" }}")); result.AppendLine(); result.AppendLine(string.Format(" public static IdNameEnum IdName(string value)")); result.AppendLine(string.Format(" {{")); result.AppendLine(string.Format(" return IdNameEnumAttribute.IdNameToEnum<IdNameEnum>(value);")); result.AppendLine(string.Format(" }}")); result.AppendLine(); result.AppendLine(string.Format(" public static string IdName(this IdNameEnum value)")); result.AppendLine(string.Format(" {{")); result.AppendLine(string.Format(" return IdNameEnumAttribute.IdNameFromEnum(value);")); result.AppendLine(string.Format(" }}")); result.AppendLine(); } }
public static void BootstrapNavbarRender(AppJson appJson) { int buttonId = 0; // BootstrapNavbarButton.Id foreach (BootstrapNavbar bootstrapNavbar in appJson.ComponentListAll().OfType <BootstrapNavbar>()) { bootstrapNavbar.ButtonList = new List <BootstrapNavbarButton>(); // Clear foreach (var item in bootstrapNavbar.GridList) { if (item.Grid?.TypeRow != null) { var propertyInfoList = UtilDalType.TypeRowToPropertyInfoList(item.Grid.TypeRow); PropertyInfo propertyInfoId = propertyInfoList.Where(item => item.Name == "Id" && item.PropertyType == typeof(int)).SingleOrDefault(); PropertyInfo propertyInfoParentId = propertyInfoList.Where(item => item.Name == "ParentId" && item.PropertyType == typeof(int?)).SingleOrDefault(); PropertyInfo propertyInfoTextHtml = propertyInfoList.Where(item => item.Name == "TextHtml" && item.PropertyType == typeof(string)).SingleOrDefault(); if (propertyInfoParentId != null) { UtilFramework.Assert(propertyInfoId != null, "Row needs a column 'Id'!"); } UtilFramework.Assert(propertyInfoTextHtml != null, string.Format("Row needs a column 'TextHtml' ({0})!", UtilDalType.TypeRowToTableNameCSharp(item.Grid.TypeRow))); // Add for example language switch if (item.IsSelectMode) { if (item.Grid.RowSelect != null) { string textHtml = (string)propertyInfoTextHtml.GetValue(item.Grid.RowSelect); var args = new BootstrapNavbarButtonArgs { BootstrapNavbar = bootstrapNavbar, Grid = item.Grid, Row = item.Grid.RowSelect }; var result = new BootstrapNavbarButtonResult { TextHtml = textHtml }; bootstrapNavbar.ButtonTextHtml(args, result); buttonId += 1; var button = new BootstrapNavbarButton { Id = buttonId, Grid = item.Grid, RowStateId = item.Grid.RowSelectRowStateId.Value, TextHtml = result.TextHtml }; bootstrapNavbar.ButtonList.Add(button); BootstrapNavbarRender(bootstrapNavbar, item, button, ref button.ButtonList, findParentId: null, propertyInfoId, propertyInfoParentId, propertyInfoTextHtml, ref buttonId); } } else { BootstrapNavbarRender(bootstrapNavbar, item, null, ref bootstrapNavbar.ButtonList, findParentId: null, propertyInfoId, propertyInfoParentId, propertyInfoTextHtml, ref buttonId); } } } } }
/// <summary> /// Add reference table. Parameter fieldNameId references a table. For example: "UserId". It also needs a corresponding "UserIdName". Command cli generate will produce "UserId = 0" CSharp code. /// </summary> /// <typeparam name="TRow">For example: "LoginUserRole".</typeparam> /// <typeparam name="TRowReference">For example: "LoginUser".</typeparam> /// <param name="fieldNameId">For example: "UserId". Needs a corresponding "UserIdName".</param> public void AddReference <TRow, TRowReference>(string fieldNameId) where TRow : Row where TRowReference : Row { string fieldNameIdCSharp = fieldNameId; Type typeRowResult; string fieldNameIdCSharpResult; string fieldNameIdSqlResult; Type typeRowIntegrateResult; string fieldNameIdNameCSharpResult; string fieldNameIdNameSqlResult; Type typeRowReferenceResult; Type typeRowReferenceIntegrateResult; // Row { Type typeRow = typeof(TRow); string tableNameCSharp = UtilDalType.TypeRowToTableNameCSharp(typeRow); UtilFramework.Assert(!tableNameCSharp.EndsWith("Integrate"), string.Format("Do not add Integrate. Use underlying sql table! ({0})", tableNameCSharp)); var fieldId = UtilDalType.TypeRowToFieldList(typeRow).Where(item => item.FieldNameCSharp == fieldNameIdCSharp).FirstOrDefault(); UtilFramework.Assert(fieldId != null, string.Format("Field not found! ({0}.{1})", tableNameCSharp, fieldNameIdCSharp)); typeRowResult = typeRow; fieldNameIdCSharpResult = fieldId.FieldNameCSharp; fieldNameIdSqlResult = fieldId.FieldNameSql; } // Row Integrate { Type typeRow = typeof(TRow); string tableNameCSharp = UtilDalType.TypeRowToTableNameCSharp(typeRow); var tableIntegrate = TableNameCSharpList.Where(item => item.Value == tableNameCSharp + "Integrate").SingleOrDefault(); Type typeRowIntegrate = tableIntegrate.Key; string tableNameIntegrate = tableIntegrate.Value; UtilFramework.Assert(tableNameIntegrate != null, string.Format("CSharp Integrate row not found! Run command cli generate? ({0})", tableNameCSharp)); var fieldIntegrateId = UtilDalType.TypeRowToFieldList(typeRowIntegrate).Where(item => item.FieldNameCSharp == fieldNameIdCSharp).FirstOrDefault(); UtilFramework.Assert(fieldIntegrateId != null, string.Format("Field not found! ({0}.{1})", tableNameIntegrate, fieldNameIdCSharp)); var fieldIntegrateIdName = UtilDalType.TypeRowToFieldList(typeRowIntegrate).Where(item => item.FieldNameCSharp == fieldNameIdCSharp + "Name").FirstOrDefault(); UtilFramework.Assert(fieldIntegrateIdName != null, string.Format("CSharp field not found! Run command cli generate? ({0}.{1})", tableNameIntegrate, fieldNameIdCSharp + "Name")); typeRowIntegrateResult = typeRowIntegrate; fieldNameIdNameCSharpResult = fieldIntegrateIdName.FieldNameCSharp; fieldNameIdNameSqlResult = fieldIntegrateIdName.FieldNameCSharp; } // Row Reference { Type typeRow = typeof(TRowReference); string tableNameCSharp = UtilDalType.TypeRowToTableNameCSharp(typeRow); UtilFramework.Assert(!tableNameCSharp.EndsWith("Integrate"), string.Format("Do not add Integrate. Use underlying sql table! ({0})", tableNameCSharp)); var fieldId = UtilDalType.TypeRowToFieldList(typeRow).Where(item => item.FieldNameCSharp == "Id").FirstOrDefault(); UtilFramework.Assert(fieldId != null, string.Format("Field not found! ({0}.{1})", tableNameCSharp, "Id")); typeRowReferenceResult = typeRow; } // Row Reference Integrate { Type typeRow = typeof(TRowReference); string tableNameCSharp = UtilDalType.TypeRowToTableNameCSharp(typeRow); var tableIntegrate = TableNameCSharpList.Where(item => item.Value == tableNameCSharp + "Integrate").SingleOrDefault(); Type typeRowIntegrate = tableIntegrate.Key; string tableNameIntegrate = tableIntegrate.Value; UtilFramework.Assert(tableNameIntegrate != null, string.Format("Integrate not found! ({0})", tableNameIntegrate)); var fieldIntegrateId = UtilDalType.TypeRowToFieldList(typeRowIntegrate).Where(item => item.FieldNameCSharp == "Id").FirstOrDefault(); UtilFramework.Assert(fieldIntegrateId != null, string.Format("Field not found! ({0}.{1})", tableNameIntegrate, "Id")); var fieldIntegrateIdName = UtilDalType.TypeRowToFieldList(typeRowIntegrate).Where(item => item.FieldNameCSharp == "IdName").FirstOrDefault(); UtilFramework.Assert(fieldIntegrateIdName != null, string.Format("Field not found! ({0}.{1})", tableNameIntegrate, "IdName")); typeRowReferenceIntegrateResult = typeRowIntegrate; } // Result var reference = new UtilDalUpsertIntegrate.Reference(typeRowResult, fieldNameIdCSharpResult, fieldNameIdSqlResult, typeRowIntegrateResult, fieldNameIdNameCSharpResult, fieldNameIdNameSqlResult, typeRowReferenceResult, typeRowReferenceIntegrateResult); UtilFramework.Assert(ResultReference.Count(item => item.TypeRow == reference.TypeRow && item.FieldNameIdCSharp == reference.FieldNameIdCSharp) == 0, "Reference already defined!"); ResultReference.Add(reference); }
/// <summary> /// Add unique key. /// </summary> public void AddKey <TRow>(params string[] fieldNameKeyList) where TRow : Row { Type typeRow = typeof(TRow); // Asser table name ends with Integrate string tableNameCSharp = UtilDalType.TypeRowToTableNameCSharp(typeRow); UtilFramework.Assert(!tableNameCSharp.EndsWith("Integrate"), string.Format("Do not add Integrate. Use underlying sql table! ({0})", tableNameCSharp)); // Asser field exists var fieldNameCSharpList = UtilDalType.TypeRowToFieldList(typeRow).Select(item => item.FieldNameCSharp).ToList(); foreach (var fieldNameCSharp in fieldNameKeyList) { UtilFramework.Assert(fieldNameCSharpList.Contains(fieldNameCSharp), string.Format("Field not found! ({0})", fieldNameCSharp)); } if (ResultKey.ContainsKey(typeof(TRow))) { UtilFramework.Assert(ResultKey[typeRow].SequenceEqual(fieldNameKeyList), string.Format("TypeRow added with different FieldNameKeyList! ({0})", UtilDalType.TypeRowToTableNameCSharp(typeRow))); } else { ResultKey.Add(typeRow, fieldNameKeyList); } }
internal GenerateIntegrateResult(List <Assembly> assemblyList) { AssemblyList = assemblyList; TableNameCSharpList = UtilDalType.TableNameCSharpList(AssemblyList.ToArray()); Result = new List <GenerateIntegrateItem>(); }
/// <summary> /// Returns Integrate rows to generate CSharp code. /// </summary> /// <param name="isDeployDb">Method is called from command cli generate or cli deployDb.</param> /// <param name="tableNameCSharpApplicationFilterList">TableNameCSharp defined in method AppCli.CommandGenerateFilter();</param> internal GenerateIntegrateResult CommandGenerateIntegrateInternal(bool isDeployDb, List <string> tableNameCSharpApplicationFilterList) { var result = new GenerateIntegrateResult(AssemblyList(true, true)); result.AddKey <FrameworkTable>(nameof(FrameworkTable.TableNameCSharp)); // Do not generate CSharp code for table FrameworkTable and FrameworkField. Add reference for deoplyDb. result.AddKey <FrameworkField>(nameof(FrameworkField.TableId), nameof(FrameworkField.FieldNameCSharp)); result.AddReference <FrameworkField, FrameworkTable>(nameof(FrameworkFieldIntegrate.TableId)); var tableNameCSharpFrameworkList = UtilDalType.TableNameCSharpList(AssemblyFramework); // TableNameCSharp declared in Framework assembly. var tableNameCSharpApplicationList = UtilDalType.TableNameCSharpList(AssemblyApplication, AssemblyApplicationDatabase); // TableNameCSharp declared in Application assembly. var fieldNameCSharpFrameworkList = UtilDalType.FieldNameCSharpList(AssemblyFramework); // FieldNameCSharp declared in Framework assembly var fieldNameCSharpApplicationList = UtilDalType.FieldNameCSharpList(AssemblyApplication, AssemblyApplicationDatabase); // FieldNameCSharp declared in Framework assembly // Filter out tables defined in method AppCli.CommandGenerateFilter(); if (tableNameCSharpApplicationFilterList != null) { tableNameCSharpApplicationList = tableNameCSharpApplicationList.Where(item => tableNameCSharpApplicationFilterList.Contains(item.Value)).ToDictionary(item => item.Key, item => item.Value); fieldNameCSharpApplicationList = fieldNameCSharpApplicationList.Where(item => tableNameCSharpApplicationFilterList.Contains(item.TableNameCSharp)).ToList(); } // Prevent build error "An expression tree may not contain a tuple literal". var fieldNameCSharpFrameworkNoTupleList = fieldNameCSharpFrameworkList.Select(item => item.TableNameCSharp + "/" + item.FieldNameCSharp); var fieldNameCSharpApplicationNoTupleList = fieldNameCSharpApplicationList.Select(item => item.TableNameCSharp + "/" + item.FieldNameCSharp); // FrameworkConfigGridIntegrate { var rowList = Data.Query <FrameworkConfigGridIntegrate>(); // Framework (.\cli.cmd generate -f) { var rowFilterList = rowList.Where(item => tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter Framework. rowFilterList = rowFilterList.OrderBy(item => item.IdName); result.Add( isFrameworkDb: true, isApplication: false, typeRow: typeof(FrameworkConfigGridIntegrate), query: rowFilterList ); } // Application (.\cli.cmd generate) { var rowFilterList = rowList.Where(item => !tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp) && tableNameCSharpApplicationList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter (not Framework and Application). rowFilterList = rowFilterList.OrderBy(item => item.IdName); result.Add( isFrameworkDb: false, isApplication: false, typeRow: typeof(FrameworkConfigGridIntegrate), query: rowFilterList ); } result.AddKey <FrameworkConfigGrid>(nameof(FrameworkConfigGrid.TableId), nameof(FrameworkConfigGrid.ConfigName)); result.AddReference <FrameworkConfigGrid, FrameworkTable>(nameof(FrameworkConfigGrid.TableId)); } // FrameworkConfigFieldIntegrate { var rowList = Data.Query <FrameworkConfigFieldIntegrate>(); // Framework (.\cli.cmd generate -f) { var rowFilterList = rowList.Where(item => tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter FrameworkDb. rowFilterList = rowList.Where(item => fieldNameCSharpFrameworkNoTupleList.Contains(item.TableNameCSharp + "/" + item.FieldNameCSharp)); // Filter FieldNameCSharp declared in Framework assembly. rowFilterList = rowFilterList.OrderBy(item => item.FieldIdName); result.Add( isFrameworkDb: true, isApplication: false, typeRow: typeof(FrameworkConfigFieldIntegrate), query: rowFilterList ); } // Application (.\cli.cmd generate) { var rowFilterList = rowList.Where(item => !tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp) && tableNameCSharpApplicationList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter (not Framework and Application). rowFilterList = rowList.Where(item => fieldNameCSharpApplicationNoTupleList.Contains(item.TableNameCSharp + "/" + item.FieldNameCSharp)); // Filter FieldNameCSharp declared in Application assembly. rowFilterList = rowFilterList.OrderBy(item => item.FieldIdName); result.Add( isFrameworkDb: false, isApplication: false, typeRow: typeof(FrameworkConfigFieldIntegrate), query: rowFilterList ); } result.AddKey <FrameworkConfigField>(nameof(FrameworkConfigField.ConfigGridId), nameof(FrameworkConfigField.FieldId), nameof(FrameworkConfigField.InstanceName)); result.AddReference <FrameworkConfigField, FrameworkConfigGrid>(nameof(FrameworkConfigField.ConfigGridId)); result.AddReference <FrameworkConfigField, FrameworkField>(nameof(FrameworkConfigField.FieldId)); } // Application (custom) Integrate data rows to generate CSharp code from. CommandGenerateIntegrate(result); // Call method CommandGenerateIntegrate(); on external AppCli for deployDb only. Not for cli generate command. if (isDeployDb) { UtilExternal.CommandGenerateIntegrate(this, result); } return(result); }
public void Add <TRow>(List <TRow> rowList) where TRow : Row { Type typeRow = typeof(TRow); // Reference from GenerateIntegrate to DeployDbIntegrate var referenceFilterList = GenerateIntegrateResult.ResultReference.Where(item => item.TypeRowIntegrate == typeof(TRow)).ToList(); // Make sure reference tables are deployed. foreach (var item in referenceFilterList) { if (item.TypeRowReferenceIntegrate != typeRow) // Exclude hierarchical reference { int referenceCount = Result.Count(itemLocal => itemLocal.TypeRow == item.TypeRowReferenceIntegrate || itemLocal.TypeRow == item.TypeRowReference); UtilFramework.Assert(referenceCount > 0, string.Format("Reference table not yet deployed! ({0})", UtilDalType.TypeRowToTableNameCSharp(item.TypeRowReferenceIntegrate))); } } // Key from GenerateIntegrate var typeRowUnderlying = typeRow; string tableNameCSharp = UtilDalType.TypeRowToTableNameCSharp(typeRow); if (tableNameCSharp.EndsWith("Integrate")) { string tableNameCSharpUnderlying = tableNameCSharp.Substring(0, tableNameCSharp.Length - "Integrate".Length); typeRowUnderlying = GenerateIntegrateResult.TableNameCSharpList.SingleOrDefault(item => item.Value == tableNameCSharpUnderlying).Key; UtilFramework.Assert(typeRowUnderlying != null, string.Format("Use underlying sql table! ({0})", tableNameCSharp)); } UtilFramework.Assert(GenerateIntegrateResult.ResultKey.ContainsKey(typeRowUnderlying), string.Format("TypRow not unique key defined! See also method GenerateIntegrateResult.AddKey(); ({0})", tableNameCSharp)); var fieldNameCSharpKeyList = GenerateIntegrateResult.ResultKey[typeRowUnderlying]; // Result var result = UtilDalUpsertIntegrate.UpsertItem.Create(rowList, fieldNameCSharpKeyList, referenceFilterList); // Make sure table is not already added. if (Result.Count > 0 && Result[^ 1].TypeRow != result.TypeRow) // Do not test ist previous is identical (because of hierarchical reference calling this method multiple times). { UtilFramework.Assert(Result.Count(item => item.TypeRow == result.TypeRow) == 0, string.Format("Table already added! ({0})", UtilDalType.TypeRowToTableNameCSharp(result.TypeRow))); } Result.Add(result); }
/// <summary> /// Script to generate CSharp code. Returns true, if succsesful. /// </summary> /// <param name="isFrameworkDb">If true, generate CSharp code for Framework library (internal use only) otherwise generate code for Application.</param> public static bool Run(bool isFrameworkDb, AppCli appCli) { bool isSuccessful = true; MetaSql metaSql = new MetaSql(isFrameworkDb); // Custom sql table and field filtering for code generation. var list = metaSql.List; var typeRowCalculatedList = new List <Type>(); // Calculated row. if (isFrameworkDb == false) { // Call method CommandGenerateFilter(); Run(ref list, ref typeRowCalculatedList, appCli); } MetaCSharp metaCSharp = new MetaCSharp(list); // Generate CSharp classes from database schema and save (*.cs) files. UtilCli.ConsoleWriteLineColor("Generate CSharp classes from database schema and write (*.cs) files", ConsoleColor.Green); new CSharpGenerate(metaCSharp).Run(isFrameworkDb, out string cSharp); if (isFrameworkDb == false) { UtilFramework.FileSave(UtilFramework.FolderName + "Application.Database/Database/Database.cs", cSharp); } else { UtilFramework.FileSave(UtilFramework.FolderName + "Framework/Framework/Database/Database.cs", cSharp); } UtilCli.ConsoleWriteLineColor("Generate CSharp classes from database schema and write (*.cs) files succsesful!", ConsoleColor.Green); // Read Integrate data from database and save (*.cs) files. UtilCli.ConsoleWriteLineColor("Generate CSharp code for Integrate data and write to (*.cs) files", ConsoleColor.Green); GenerateIntegrateResult generateIntegrateResult = null; try { // TableNameCSharp defined in method AppCli.CommandGenerateFilter(); List <string> tableNameCSharpApplicationFilterList = null; if (isFrameworkDb == false) { tableNameCSharpApplicationFilterList = metaCSharp.List.GroupBy(item => item.SchemaNameCSharp + "." + item.TableNameCSharp).Select(item => item.Key).ToList(); var tableNameCSharpCalculatedList = typeRowCalculatedList.Select(item => UtilDalType.TypeRowToTableNameCSharp(item)).ToList(); tableNameCSharpApplicationFilterList.AddRange(tableNameCSharpCalculatedList); } generateIntegrateResult = appCli.CommandGenerateIntegrateInternal(isDeployDb: false, tableNameCSharpApplicationFilterList); } catch (SqlException exception) { isSuccessful = false; string message = string.Format("Read Integrate data from database failed! This can happen after an sql schema change. Try to run generate script again! ({0})", exception.Message); UtilCli.ConsoleWriteLineColor(message, ConsoleColor.Red); } if (generateIntegrateResult != null) { Run(generateIntegrateResult); new GenerateCSharpIntegrate().Run(out string cSharpCli, isFrameworkDb, isApplication: false, integrateList: generateIntegrateResult.Result); new GenerateCSharpIntegrate().Run(out string cSharpApplication, isFrameworkDb, isApplication: true, integrateList: generateIntegrateResult.Result); if (isFrameworkDb == false) { UtilFramework.FileSave(UtilFramework.FolderName + "Application.Cli/Database/DatabaseIntegrate.cs", cSharpCli); UtilFramework.FileSave(UtilFramework.FolderName + "Application.Database/Database/DatabaseIntegrate.cs", cSharpApplication); } else { UtilFramework.FileSave(UtilFramework.FolderName + "Framework/Framework.Cli/Database/DatabaseIntegrate.cs", cSharpCli); UtilFramework.FileSave(UtilFramework.FolderName + "Framework/Framework/Database/DatabaseIntegrate.cs", cSharpApplication); } UtilCli.ConsoleWriteLineColor("Generate CSharp code for Integrate data and write to (*.cs) files successful!", ConsoleColor.Green); } return(isSuccessful); }
/// <summary> /// Returns ConnectionString for Application or Framework database. /// </summary> /// <param name="typeRow">Application or Framework data row.</param> public static string ConnectionString(Type typeRow) { bool isFrameworkDb = UtilDalType.TypeRowIsFrameworkDb(typeRow); return(ConnectionString(isFrameworkDb)); }
/// <summary> /// Add unique key. /// </summary> public void AddKey <TRow>(params string[] fieldNameKeyList) where TRow : Row { Type typeRow = typeof(TRow); string tableNameCSharp = UtilDalType.TypeRowToTableNameCSharp(typeRow); UtilFramework.Assert(!tableNameCSharp.EndsWith("Integrate"), string.Format("Do not add Integrate. Use underlying sql table! ({0})", tableNameCSharp)); if (ResultKey.ContainsKey(typeof(TRow))) { UtilFramework.Assert(ResultKey[typeRow].SequenceEqual(fieldNameKeyList), string.Format("TypeRow added with different FieldNameKeyList! ({0})", UtilDalType.TypeRowToTableNameCSharp(typeRow))); } else { ResultKey.Add(typeRow, fieldNameKeyList); } }
/// <summary> /// Returns Integrate rows to generate CSharp code. /// </summary> internal GenerateIntegrateResult CommandGenerateIntegrateInternal() { var result = new GenerateIntegrateResult(AssemblyList(true, true)); result.AddKey <FrameworkTable>(nameof(FrameworkTable.TableNameCSharp)); // Do not generate CSharp code for table FrameworkTable and FrameworkField. Add reference for deoplyDb. result.AddKey <FrameworkField>(nameof(FrameworkField.TableId), nameof(FrameworkField.FieldNameCSharp)); result.AddReference <FrameworkField, FrameworkTable>(nameof(FrameworkFieldIntegrate.TableId)); var tableNameCSharpFrameworkList = UtilDalType.TableNameCSharpList(AssemblyFramework); // TableNameCSharp declared in Framework assembly. var tableNameCSharpApplicationList = UtilDalType.TableNameCSharpList(AssemblyApplication, AssemblyApplicationDatabase); // TableNameCSharp declared in Application assembly. var fieldNameCSharpFrameworkList = UtilDalType.FieldNameCSharpList(AssemblyFramework).Select(item => item.TableNameCSharp + "/" + item.FieldNameCSharp); // FieldNameCSharp declared in Framework assembly var fieldNameCSharpApplicationList = UtilDalType.FieldNameCSharpList(AssemblyApplication, AssemblyApplicationDatabase).Select(item => item.TableNameCSharp + "/" + item.FieldNameCSharp); // FieldNameCSharp declared in Framework assembly // FrameworkConfigGridIntegrate { var rowList = Data.Query <FrameworkConfigGridIntegrate>(); // Framework (.\cli.cmd generate -f) { var rowFilterList = rowList.Where(item => tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter Framework. rowFilterList = rowFilterList.OrderBy(item => item.IdName); result.Add( isFrameworkDb: true, isApplication: false, typeRow: typeof(FrameworkConfigGridIntegrate), query: rowFilterList ); } // Application (.\cli.cmd generate) { var rowFilterList = rowList.Where(item => !tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp) && tableNameCSharpApplicationList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter (not Framework and Application). rowFilterList = rowFilterList.OrderBy(item => item.IdName); result.Add( isFrameworkDb: false, isApplication: false, typeRow: typeof(FrameworkConfigGridIntegrate), query: rowFilterList ); } result.AddKey <FrameworkConfigGrid>(nameof(FrameworkConfigGrid.TableId), nameof(FrameworkConfigGrid.ConfigName)); result.AddReference <FrameworkConfigGrid, FrameworkTable>(nameof(FrameworkConfigGrid.TableId)); } // FrameworkConfigFieldIntegrate { var rowList = Data.Query <FrameworkConfigFieldIntegrate>(); // Framework (.\cli.cmd generate -f) { var rowFilterList = rowList.Where(item => tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter FrameworkDb. rowFilterList = rowList.Where(item => fieldNameCSharpFrameworkList.Contains(item.TableNameCSharp + "/" + item.FieldNameCSharp)); // Filter FieldNameCSharp declared in Framework assembly. rowFilterList = rowFilterList.OrderBy(item => item.FieldIdName); result.Add( isFrameworkDb: true, isApplication: false, typeRow: typeof(FrameworkConfigFieldIntegrate), query: rowFilterList ); } // Application (.\cli.cmd generate) { var rowFilterList = rowList.Where(item => !tableNameCSharpFrameworkList.Values.ToArray().Contains(item.TableNameCSharp) && tableNameCSharpApplicationList.Values.ToArray().Contains(item.TableNameCSharp)); // Filter (not Framework and Application). rowFilterList = rowList.Where(item => fieldNameCSharpApplicationList.Contains(item.TableNameCSharp + "/" + item.FieldNameCSharp)); // Filter FieldNameCSharp declared in Application assembly. rowFilterList = rowFilterList.OrderBy(item => item.FieldIdName); result.Add( isFrameworkDb: false, isApplication: false, typeRow: typeof(FrameworkConfigFieldIntegrate), query: rowFilterList ); } result.AddKey <FrameworkConfigField>(nameof(FrameworkConfigField.ConfigGridId), nameof(FrameworkConfigField.FieldId), nameof(FrameworkConfigField.InstanceName)); result.AddReference <FrameworkConfigField, FrameworkConfigGrid>(nameof(FrameworkConfigField.ConfigGridId)); result.AddReference <FrameworkConfigField, FrameworkField>(nameof(FrameworkConfigField.FieldId)); } // Application (custom) Integrate data rows to generate CSharp code from. CommandGenerateIntegrate(result); return(result); }