Esempio n. 1
0
        public void Generate()
        {
            if (Context == null)
            {
                throw new ArgumentNullException(nameof(Context));
            }

            var config      = Context.Config;
            var table       = Context.Table;
            var namingModel = Context.Naming;

            var typesPath = config.FolderPathForExtractTypesFiles;
            var fs        = _fs;

            var typeContractCanBeExportable = Context.Config.TypeContractIsExportable;

            if (typeContractCanBeExportable)
            {
                var contractGenerator = new ContractGenerator(Context);

                if (fs.Exists(typesPath + namingModel.OutputFileNameContract + ".cs") == false)
                {
                    fs.Write(typesPath + namingModel.OutputFileNameContract + ".cs", contractGenerator.UserFile);
                }

                WriteFileIfContentNotEqual(typesPath + namingModel.OutputFileNameContract + ".designer.cs", contractGenerator.DesignerFile);
            }

            var businessPath = config.FolderPathForExtractBusinessFiles;

            var businessClassGenerator = new BusinessClassGenerator(Context);

            if (!fs.Exists(businessPath + namingModel.OutputFileNameBusiness + ".cs"))
            {
                var userFilePath = businessPath + namingModel.OutputFileNameBusiness + ".cs";

                fs.Write(userFilePath, businessClassGenerator.UserFile);
            }

            var designerFilePath = businessPath + namingModel.OutputFileNameBusiness + ".designer.cs";

            WriteFileIfContentNotEqual(designerFilePath, businessClassGenerator.DesignerFile);

            var orchestrationClassGenerator = new OrchestrationFileGenerator(Context);
            var orchestrationPath           = config.FolderPathForExtractOrchestrationFiles;

            if (config.FolderPathForExtractOrchestrationFiles != null)
            {
                if (!fs.Exists(orchestrationPath + namingModel.OutputFileNameOrchestration + ".cs"))
                {
                    var userFilePath = orchestrationPath + namingModel.OutputFileNameOrchestration + ".cs";

                    fs.Write(userFilePath, orchestrationClassGenerator.UserFile);
                }

                WriteFileIfContentNotEqual(orchestrationPath + namingModel.OutputFileNameOrchestration + ".designer.cs", orchestrationClassGenerator.DesignerFile);
            }

            var storedProcedureFolder = config.FolderPathForExtractStoredProcedureFiles ?? businessPath;

            #region Procedures
            string procedureText;
            string sqlFilePath;

            foreach (var c in config.CustomSelects)
            {
                string sqlProcedureName;

                if (c.IsSelectByValueList)
                {
                    var generator = new SelectByValueArraySql(Context, c.SelectByValueListColumnName);
                    procedureText    = generator.Generate();
                    sqlProcedureName = generator.NameOfSqlProcedure;
                }
                else
                {
                    var generator = new SelectByColumnsSql(Context, c);
                    procedureText    = generator.Generate();
                    sqlProcedureName = generator.SqlProcedureName;
                }

                sqlFilePath = storedProcedureFolder + string.Format(CultureInfo, "{0}.{1}.sql", namingModel.SchemaName, sqlProcedureName);

                WriteFileIfContentNotEqual(sqlFilePath, procedureText);
            }

            foreach (var c in config.CustomUpdates)
            {
                procedureText = new UpdateSqlCustom(Context, c).Generate();
                WriteFileIfContentNotEqual(storedProcedureFolder + "{0}.{1}.sql".FormatCode(namingModel.SchemaName, c.SqlProcedureName), procedureText);
            }

            foreach (var c in config.CustomExists)
            {
                procedureText = new CustomExistSql(Context, c).Generate();
                WriteFileIfContentNotEqual(storedProcedureFolder + "{0}.{1}.sql".FormatCode(namingModel.SchemaName, c.SqlProcedureName), procedureText);
            }

            if (config.CanGenerateInsert)
            {
                procedureText = new InsertSql(Context).Generate();

                WriteFileIfContentNotEqual(storedProcedureFolder + namingModel.NameOfSqlProcedureInsertWithSchema + ".sql", procedureText);
            }

            if (config.CanGenerateInsertStructured)
            {
                procedureText = new InsertStructuredSql(Context).Generate();

                WriteFileIfContentNotEqual(storedProcedureFolder + namingModel.NameOfSqlProcedureInsertWithSchema + InsertStructuredSql.Structured + ".sql", procedureText);
            }

            if (table.PrimaryKeyColumns.Any())
            {
                if (config.CanGenerateUpdate)
                {
                    procedureText = new UpdateSql(Context).Generate();
                    WriteFileIfContentNotEqual(storedProcedureFolder + namingModel.NameOfSqlProcedureUpdateWithSchema + ".sql", procedureText);
                }

                if (config.CanGenerateDelete)
                {
                    procedureText = new DeleteSql(Context).Generate();

                    WriteFileIfContentNotEqual(storedProcedureFolder + namingModel.NameOfSqlProcedureDeleteWithSchema + ".sql", procedureText);
                }

                if (config.CanGenerateSelectByKey)
                {
                    procedureText = new SelectByKeySql(Context).Generate();

                    WriteFileIfContentNotEqual(storedProcedureFolder + namingModel.NameOfSqlProcedureSelectByKeyWithSchema + ".sql", procedureText);
                }

                if (config.CanGenerateSelectByKeyList)
                {
                    procedureText = new SelectByKeyListSql(Context).Generate();

                    WriteFileIfContentNotEqual(storedProcedureFolder + namingModel.NameOfSqlProcedureSelectByKeyListWithSchema + ".sql", procedureText);
                }
            }
            #endregion
        }
 protected override void WriteComment()
 {
     WriteLine("///" + PaddingForComment + "" + SelectByValueArraySql.GetComment(DatabaseTableFullPath, GetColumnName()));
 }