Exemplo n.º 1
0
        public string Generate()
        {
            Padding = PaddingForMethodDeclaration;
            WriteLine("/// <summary>");

            WriteLine("///" + PaddingForComment + "<para> {0} </para>", ForcedComment);

            if (Comment != null)
            {
                foreach (var commentLine in from line in Comment.Split(Environment.NewLine.ToCharArray())
                         where !string.IsNullOrWhiteSpace(line)
                         select line)
                {
                    WriteLine("///" + PaddingForComment + "<para> " + commentLine + " </para>");
                }
            }

            if (Parameters.Any())
            {
                foreach (var p in Parameters)
                {
                    var column       = p.FindColum(Columns);
                    var propertyName = p.GetPropertyName(Columns);

                    if (propertyName == null)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} = {0}</param>",
                                  column.ColumnName.AsMethodParameter(), column.ColumnName);
                    }
                    else if (propertyName == Names.NotEqual)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} != {0} </param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.BiggerThan)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} &gt; {0}</param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.BiggerThanOrEquals)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} &gt;= {0}</param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.LessThan)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} &lt; {0}</param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.LessThanOrEquals)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} &lt;= {0}</param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.StartsWith)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} LIKE {0} + '%'</param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.EndsWith)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} LIKE '%' + {0}</param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.Contains)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE {1} LIKE '%' + {0} + '%'</param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else if (propertyName == Names.IsNull)
                    {
                        WriteLine("///" + PaddingForComment + "<param name=\"{0}\">WHERE(( {0} = true AND {1} IS NULL ) OR ( {0} = false AND {1} IS NOT NULL )) </param>",
                                  column.ColumnName.AsMethodParameter() + propertyName, column.ColumnName);
                    }
                    else
                    {
                        throw new Exception(propertyName);
                    }
                }
            }

            WriteLine("/// </summary>");
            WritePadding();

            var methodAccess = "public ";

            if (CustomSelect.MemberAccessibility == MemberAccessibility.Private)
            {
                methodAccess = "";
            }

            if (CustomSelect.MemberAccessibility == MemberAccessibility.Internal)
            {
                methodAccess = "internal ";
            }

            Write(methodAccess);
            Write("GenericResponse<{1}> {0}(", NameOfCsMethod, GenericResponseMethodReturnType);

            if (Parameters.Any())
            {
                var last = Parameters.Last();
                foreach (var p in Parameters)
                {
                    var column             = p.FindColum(Columns);
                    var propertyName       = p.GetPropertyName(Columns);
                    var propertyNameIsNull = propertyName == Names.IsNull;

                    var parameterName = column.ColumnName.AsMethodParameter() + propertyName;
                    var parameterType = column.DotNetType;

                    if (p.CanBeNull)
                    {
                        parameterType = SqlDataType.GetDotNetNullableType(parameterType);
                    }

                    if (propertyNameIsNull)
                    {
                        parameterType = "bool";
                    }

                    Write("{0} {1}", parameterType, parameterName);

                    if (p != last)
                    {
                        Write(",");
                    }
                }
            }

            Write(")");
            WriteLine();

            WriteLine("{");

            Padding++;

            WriteLine("var returnObject = CreateResponse<{0}>();", GenericResponseMethodReturnType);

            WriteLine();

            WriteLine("var command = DBLayer.GetDBCommand(Databases.{0}, \"{1}\");",
                      Context.Naming.DatabaseEnumName, Context.Naming.SchemaName + "." + NameOfSqlProcedure);

            WriteLine();

            if (Parameters.Any())
            {
                WriteLine("#region Parameters");

                foreach (var p in Parameters)
                {
                    var column       = p.FindColum(Columns);
                    var propertyName = p.GetPropertyName(Columns);

                    var parameterName = column.ColumnName.AsMethodParameter() + propertyName;

                    var sqlDatabaseTypeName = column.SqlDatabaseTypeName;
                    if (p.GetPropertyName(Columns) == Names.IsNull)
                    {
                        sqlDatabaseTypeName = "TinyInt";
                        parameterName       = "(" + parameterName + " ? 1 : 0)";
                    }

                    WriteLine("DBLayer.AddInParameter(command, \"{0}\", SqlDbType.{1}, {2});",
                              column.ColumnName + propertyName, sqlDatabaseTypeName, parameterName);
                }

                WriteLine("#endregion");
                WriteLine();
            }

            WriteLine("var sp = DBLayer.{0}(command);", ExecutionMethod);
            WriteLine("if (!sp.Success)");
            WriteLine("{");
            Padding++;
            WriteLine("return returnObject.Add(sp);");
            Padding--;
            WriteLine("}");

            ProcessReturnValues();

            WriteLine("return returnObject;");
            Padding--;
            WriteLine("}");

            return(GeneratedString);
        }