Example #1
0
        /// <summary>
        /// Console log Integrate table relation.
        /// </summary>
        private static void Run(GenerateIntegrateResult generateIntegrateResult)
        {
            bool          isFirst = true;
            List <string> result  = new List <string>();

            foreach (var item in generateIntegrateResult.Result)
            {
                var fieldList = UtilDalUpsertIntegrate.FieldIntegrateList(item.TypeRow, generateIntegrateResult.ResultReference);
                foreach (var field in fieldList)
                {
                    if (field.IsId)
                    {
                        UtilDalType.TypeRowToTableNameSql(item.TypeRow, out string schemaNameSql, out string tableNameSql);
                        UtilDalType.TypeRowToTableNameSql(field.TypeRowReference, out string schemaNameSqlReference, out string tableNameSqlReference);

                        if (isFirst)
                        {
                            isFirst = false;
                            Console.WriteLine("Integrate Table Relation");
                        }
                        result.Add(string.Format("[{0}].[{1}].[{2}] --> [{3}].[{4}]", schemaNameSql, tableNameSql, field.FieldNameIdSql, schemaNameSqlReference, tableNameSqlReference));
                    }
                }
            }

            foreach (var item in result.Distinct().OrderBy(item => item))
            {
                Console.WriteLine(item);
            }
        }
Example #2
0
 /// <summary>
 /// Constructor for Framework and Application.
 /// </summary>
 internal GenerateIntegrateItem(GenerateIntegrateResult owner, bool isFrameworkDb, bool isApplication, Type typeRow, IQueryable <Row> query)
 {
     this.Owner         = owner;
     this.IsFrameworkDb = isFrameworkDb;
     this.IsApplication = isApplication;
     this.TypeRow       = typeRow;
     this.Query         = query;
     UtilDalType.TypeRowToTableNameSql(TypeRow, out _, out _);
     this.SchemaNameCSharp = UtilDalType.TypeRowToSchemaNameCSharp(TypeRow);
     this.TableNameCSharp  = UtilDalType.TypeRowToTableNameCSharpWithoutSchema(TypeRow);
 }
Example #3
0
        /// <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, appCli);
            MetaCSharp metaCSharp = new MetaCSharp(metaSql);

            // Generate CSharp classes from database schema and save (*.cs) files.
            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.
            GenerateIntegrateResult generateIntegrateResult = null;

            try
            {
                generateIntegrateResult = appCli.CommandGenerateIntegrateInternal();
            }
            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);
        }
Example #4
0
 /// <summary>
 /// Call method CommandGenerateIntegrate(); on external AppCli.
 /// </summary>
 public static void CommandGenerateIntegrate(AppCli appCli, GenerateIntegrateResult result)
 {
     foreach (var type in appCli.AssemblyApplicationCli.GetTypes())
     {
         if (UtilFramework.IsSubclassOf(type, typeof(AppCli)))
         {
             if (type != appCli.GetType())
             {
                 var appCliExternal = (AppCli)Activator.CreateInstance(type);
                 appCliExternal.CommandGenerateIntegrate(result);
             }
         }
     }
 }
Example #5
0
        /// <summary>
        /// Cli generate command.
        /// </summary>
        protected override void CommandGenerateIntegrate(GenerateIntegrateResult result)
        {
            // Navigate
            result.Add(Data.Query <NavigateIntegrate>().OrderBy(item => item.IdName));
            result.AddKey <Navigate>(nameof(Navigate.Name));
            result.AddReference <Navigate, Navigate>(nameof(Navigate.ParentId));

            // LoginUser
            result.Add(Data.Query <LoginUserIntegrate>().Where(item => item.IsIntegrate == true).OrderBy(item => item.IdName), isApplication: true);
            result.AddKey <LoginUser>(nameof(LoginUser.Name));

            // LoginRole
            result.Add(Data.Query <LoginRoleIntegrate>().OrderBy(item => item.IdName), isApplication: true);
            result.AddKey <LoginRole>(nameof(LoginRole.Name));

            // LoginUserRole
            result.Add(Data.Query <LoginUserRoleIntegrate>().Where(item => item.LoginUserIsIntegrate == true).OrderBy(item => item.LoginUserIdName).ThenBy(item => item.LoginRoleIdName));
            result.AddKey <LoginUserRole>(nameof(LoginUserRole.LoginUserId), nameof(LoginUserRole.LoginRoleId));
            result.AddReference <LoginUserRole, LoginUser>(nameof(LoginUserRole.LoginUserId));
            result.AddReference <LoginUserRole, LoginRole>(nameof(LoginUserRole.LoginRoleId));

            // NavigateLoginRole
            result.Add(Data.Query <NavigateRoleIntegrate>().OrderBy(item => item.NavigateIdName).ThenBy(item => item.LoginRoleIdName));
            result.AddKey <NavigateRole>(nameof(NavigateRole.NavigateId), nameof(NavigateRole.LoginRoleId));
            result.AddReference <NavigateRole, Navigate>(nameof(NavigateRole.NavigateId));
            result.AddReference <NavigateRole, LoginRole>(nameof(NavigateRole.LoginRoleId));

            // StorageFile
            result.Add(Data.Query <StorageFileIntegrate>().OrderBy(item => item.IdName));
            result.AddKey <StorageFile>(nameof(StorageFile.FileName));
            result.AddBlob <StorageFileIntegrate>(nameof(StorageFile.Data), (row) => row.FileName);

            // Content
            result.Add(Data.Query <ContentIntegrate>().OrderBy(item => item.IdName));
            result.AddKey <Content>(nameof(Content.Name));
            result.AddBlob <ContentIntegrate>(nameof(Content.TextMd), (row) => row.IdName + ".md");
            result.AddBlob <ContentIntegrate>(nameof(Content.TextHtml), (row) => row.IdName + ".html");

            // Feedback
            result.Add(Data.Query <Feedback>().OrderBy(item => item.Name));
            result.AddKey <Feedback>(nameof(Feedback.Name));
            result.AddBlob <Feedback>(nameof(Feedback.AttachmentData), (row) => row.Name + "." + row.AttachmentFileName);
        }
Example #6
0
 /// <summary>
 /// Constructor for GenerateIntegrateItem.
 /// </summary>
 /// <param name="isApplication">If true, RowList will be available at runtime as Integrate CSharp code with additional IdEnum if row contains IdName column. If false, RowList will be generated into cli as CSharp code only.</param>
 public static GenerateIntegrateItem Create <TRow>(GenerateIntegrateResult owner, IQueryable <TRow> query, bool isApplication = false) where TRow : Row
 {
     return(new GenerateIntegrateItem(owner, isApplication, typeof(TRow), query.Cast <Row>()));
 }
Example #7
0
 /// <summary>
 /// Constructor for Application.
 /// </summary>
 private GenerateIntegrateItem(GenerateIntegrateResult owner, bool isApplication, Type typeRow, IQueryable <Row> query)
     : this(owner, false, isApplication, typeRow, query)
 {
 }
Example #8
0
 /// <summary>
 /// Override this method to add Integrate data rows to list. Used by cli generate command to generate CSharp code.
 /// Note: Cli generate command is not Integrate table reference aware. Data is generated in CSharp code as it is.
 /// </summary>
 protected virtual internal void CommandGenerateIntegrate(GenerateIntegrateResult result)
 {
 }
Example #9
0
        /// <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);
        }
Example #10
0
 internal DeployDbIntegrateResult(GenerateIntegrateResult generateIntegrateResult)
 {
     this.GenerateIntegrateResult = generateIntegrateResult;
     this.Result = new List <UtilDalUpsertIntegrate.UpsertItem>();
 }
Example #11
0
        /// <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);
        }
Example #12
0
        /// <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);
        }