예제 #1
0
        void WriteDeleteByKeyMethod()
        {
            var deleteInfo = DeleteInfoCreator.Create(TableInfo);

            var sqlParameters = deleteInfo.SqlParameters;

            var parameterPart = string.Join(", ", sqlParameters.Select(x => $"{x.DotNetType} {x.ColumnName.AsMethodParameter()}"));

            file.AppendLine($"public static SqlInfo Delete({parameterPart})");
            file.OpenBracket();

            file.AppendLine($"const string sql = \"{deleteInfo.Sql}\";");
            file.AppendLine();

            file.AppendLine("var sqlInfo = new SqlInfo { CommandText = sql };");

            if (sqlParameters.Any())
            {
                file.AppendLine();
                foreach (var columnInfo in sqlParameters)
                {
                    file.AppendLine($"sqlInfo.AddInParameter(\"@{columnInfo.ColumnName}\", SqlDbType.{columnInfo.SqlDbType}, {GetValueAccessPath(columnInfo)});");
                }
            }

            file.AppendLine();
            file.AppendLine("return sqlInfo;");

            file.CloseBracket();
        }
        void WriteDeleteByKeyMethod()
        {
            if (!TableInfo.IsSupportSelectByKey)
            {
                return;
            }

            const string methodName = "Delete";

            var deleteByKeyInfo                  = DeleteInfoCreator.Create(TableInfo);
            var sqlParameters                    = deleteByKeyInfo.SqlParameters;
            var callerMemberPath                 = $"{RepositoryNamespace}.{ClassName}.{methodName}";
            var parameterDefinitionPart          = string.Join(", ", sqlParameters.Select(x => $"{x.DotNetType} {x.ColumnName.AsMethodParameter()}"));
            var sharedMethodInvocationParameters = string.Join(", ", sqlParameters.Select(x => $"{x.ColumnName.AsMethodParameter()}"));

            file.AppendLine();
            file.AppendLine("/// <summary>");
            file.AppendLine($"///{Padding.ForComment} Deletes only one record by given primary keys.");
            file.AppendLine("/// </summary>");
            file.AppendLine($"public GenericResponse<int> {methodName}({parameterDefinitionPart})");
            file.OpenBracket();
            file.AppendLine($"var sqlInfo = {sharedRepositoryClassAccessPath}.Delete({sharedMethodInvocationParameters});");
            file.AppendLine();
            file.AppendLine($"const string CallerMemberPath = \"{callerMemberPath}\";");
            file.AppendLine();
            file.AppendLine("return this.ExecuteNonQuery(CallerMemberPath, sqlInfo);");
            file.CloseBracket();
        }
예제 #3
0
        void WriteDeleteByKeyMethod()
        {
            if (!TableInfo.IsSupportSelectByKey)
            {
                return;
            }


            var methodName = "Delete" + CamelCasedTableName;

            var deleteByKeyInfo                  = DeleteInfoCreator.Create(TableInfo);
            var sqlParameters                    = deleteByKeyInfo.SqlParameters;
            var callerMemberPath                 = $"{FullClassName}.{methodName}";
            var parameterDefinitionPart          = string.Join(", ", sqlParameters.Select(x => $"{x.DotNetType} {x.ColumnName.AsMethodParameter()}"));
            var sharedMethodInvocationParameters = string.Join(", ", sqlParameters.Select(x => $"{x.ColumnName.AsMethodParameter()}"));

            file.AppendLine();
            file.AppendLine("/// <summary>");
            file.AppendLine($"///{Padding.ForComment} Deletes only one record by given primary keys.");
            file.AppendLine("/// </summary>");
            file.AppendLine($"public void {methodName}({parameterDefinitionPart})");
            file.OpenBracket();
            file.AppendLine($"var sqlInfo = {sharedRepositoryClassAccessPath}.Delete({sharedMethodInvocationParameters});");
            file.AppendLine();
            file.AppendLine($"const string CallerMemberPath = \"{callerMemberPath}\";");
            file.AppendLine();

            var whereParameters = string.Join(", ", deleteByKeyInfo.SqlParameters.Select(column => $"@{column.ColumnName}: {{{column.ColumnName.AsMethodParameter()}}}"));

            file.AppendLine("var effectedRowCount = unitOfWork.ExecuteNonQuery(CallerMemberPath, sqlInfo);");
            file.AppendLine("if (effectedRowCount != 1)");
            file.OpenBracket();
            file.AppendLine($"throw new InvalidDataException($\"{{effectedRowCount}} row effected. Effected row count should be 1 when delete from table {TableInfo.SchemaName}.{TableInfo.TableName}. WhereParameters: {whereParameters} \");");
            file.CloseBracket();
            file.CloseBracket();



            file.AppendLine();
            file.AppendLine("/// <summary>");

            var keys = string.Join(", ", deleteByKeyInfo.SqlParameters.Select(column => column.ColumnName.ToContractName()));

            string PrepareDeleteParameters(IColumnInfo column)
            {
                if (Context.TableInfo.Columns.First(c => c.ColumnName == column.ColumnName).SqlReaderMethod == SqlReaderMethods.GetBooleanValueFromChar)
                {
                    return($"contract.{column.ColumnName.ToContractName()} ? \"1\" : \"0\"");
                }
                return($"contract.{column.ColumnName.ToContractName()}");
            }

            file.AppendLine($"///{Padding.ForComment} Deletes only one record by given contract primary keys.({keys})");
            file.AppendLine("/// </summary>");
            file.AppendLine($"public void {methodName}({TableEntityClassNameForMethodParametersInRepositoryFiles} contract)");
            file.OpenBracket();
            file.AppendLine("if (contract == null)");
            file.OpenBracket();
            file.AppendLine("throw new ArgumentNullException(nameof(contract));");
            file.CloseBracket();
            file.AppendLine($"{methodName}({string.Join(", ", deleteByKeyInfo.SqlParameters.Select(PrepareDeleteParameters))});");
            file.CloseBracket();
        }