Пример #1
0
        /// <summary>
        /// Builds this instance.
        /// </summary>
        /// <returns></returns>
        public CodeMemberMethod Build()
        {
            CodeAttributeDeclaration attr = null;

            _unitMethod.Attributes = MemberAttributes.Public | MemberAttributes.Static;
            MethodStatementType statementType = MethodStatementType.Common;

            if (_memberName.StartsWith("Get"))
            {
                _unitMethod.ReturnType = new CodeTypeReference(_unitClass.Name);
                statementType          = MethodStatementType.Get;
                // data attribute
                attr = new CodeAttributeDeclaration("System.ComponentModel.DataObjectMethod",
                                                    new CodeAttributeArgument(new CodeSnippetExpression("System.ComponentModel.DataObjectMethodType.Select")));
                _unitMethod.CustomAttributes.Add(attr);
            }
            else if (_memberName.StartsWith("SelCount"))
            {
                _memberName            = "SelectCount";
                _unitMethod.ReturnType = new CodeTypeReference(typeof(int));
                statementType          = MethodStatementType.SelectCount;
                // data attribute
                attr = new CodeAttributeDeclaration("System.ComponentModel.DataObjectMethod",
                                                    new CodeAttributeArgument(new CodeSnippetExpression("System.ComponentModel.DataObjectMethodType.Select")));
                _unitMethod.CustomAttributes.Add(attr);
            }
            else if (_memberName.StartsWith("Sel"))
            {
                if (!_memberName.StartsWith("Select"))
                {
                    _memberName = _memberName.Replace("Sel", "Select");
                }
                _unitMethod.ReturnType = new CodeTypeReference(
                    string.Format("Artem.Data.Access.DataAccessView<{0}>", _unitClass.Name));
                statementType = MethodStatementType.Select;
                // data attribute
                attr = new CodeAttributeDeclaration("System.ComponentModel.DataObjectMethod",
                                                    new CodeAttributeArgument(new CodeSnippetExpression("System.ComponentModel.DataObjectMethodType.Select")));
                _unitMethod.CustomAttributes.Add(attr);
            }
            else if (_memberName.StartsWith("Del"))
            {
                if (!_memberName.StartsWith("Delete"))
                {
                    _memberName = _memberName.Replace("Del", "Delete");
                }
                statementType = MethodStatementType.Delete;
                // data attribute
                attr = new CodeAttributeDeclaration("System.ComponentModel.DataObjectMethod",
                                                    new CodeAttributeArgument(new CodeSnippetExpression("System.ComponentModel.DataObjectMethodType.Delete")));
                _unitMethod.CustomAttributes.Add(attr);
            }
            else if (_memberName.StartsWith("Ins"))
            {
                if (!_memberName.StartsWith("Insert"))
                {
                    _memberName = _memberName.Replace("Ins", "Insert");
                }
                statementType = MethodStatementType.Insert;
                // data attribute
                attr = new CodeAttributeDeclaration("System.ComponentModel.DataObjectMethod",
                                                    new CodeAttributeArgument(new CodeSnippetExpression("System.ComponentModel.DataObjectMethodType.Insert")));
                _unitMethod.CustomAttributes.Add(attr);
            }
            else if (_memberName.StartsWith("Upd"))
            {
                if (!_memberName.StartsWith("Update"))
                {
                    _memberName = _memberName.Replace("Upd", "Update");
                }
                statementType = MethodStatementType.Update;
                // data attribute
                attr = new CodeAttributeDeclaration("System.ComponentModel.DataObjectMethod",
                                                    new CodeAttributeArgument(new CodeSnippetExpression("System.ComponentModel.DataObjectMethodType.Update")));
                _unitMethod.CustomAttributes.Add(attr);
            }
            _unitMethod.Name = _memberName;
            BuildStatement(statementType);
            return(_unitMethod);
        }
Пример #2
0
        /// <summary>
        /// Builds the params.
        /// </summary>
        void BuildStatement(MethodStatementType statementType)
        {
            StringBuilder buff = new StringBuilder();
            CodeParameterDeclarationExpression unitParam;
            string      paramName;
            string      dbType;
            string      indentSpace    = "            ";//12 chars
            string      indentSpaceSub = "                ";
            PagingFlags pagingFlags    = PagingFlags.None;

            buff.Append(indentSpace);
            buff.AppendFormat("using(DataAccess db = new DataAccess(\"{0}\"))", _sqlName);
            buff.AppendLine("{");
            foreach (DataRow dr in FetchParamList().Rows)
            {
                paramName = DbDataConvert.ToString(dr[1]);
                dbType    = DbDataConvert.ToString(dr[2]);
                unitParam = new CodeParameterDeclarationExpression(
                    DalUtil.MapDbType(dbType),
                    DalUtil.CreateMemberName(paramName, MapMemberType.Parameter));
                switch (unitParam.Name.ToLower())
                {
                case "rowindex":
                    if (statementType == MethodStatementType.Select ||
                        statementType == MethodStatementType.SelectCount)
                    {
                        ///
                        pagingFlags   |= PagingFlags.RowIndex;
                        unitParam.Type = new CodeTypeReference(typeof(int?));
                        buff.Append(indentSpaceSub)
                        .AppendFormat("if ({0}.HasValue)", unitParam.Name)
                        .AppendLine()
                        .Append(indentSpaceSub).Append("    ")
                        .AppendFormat("db.AddParameter(\"{0}\", {1}.Value);", paramName, unitParam.Name);
                    }
                    else
                    {
                        buff.Append(indentSpaceSub)
                        .AppendFormat("db.AddParameter(\"{0}\", {1});", paramName, unitParam.Name);
                    }
                    _unitMethod.Parameters.Add(unitParam);
                    break;

                case "pagesize":
                    if (statementType == MethodStatementType.Select ||
                        statementType == MethodStatementType.SelectCount)
                    {
                        ///
                        pagingFlags   |= PagingFlags.PageSize;
                        unitParam.Type = new CodeTypeReference(typeof(int?));
                        buff.Append(indentSpaceSub)
                        .AppendFormat("if ({0}.HasValue)", unitParam.Name)
                        .AppendLine()
                        .Append(indentSpaceSub).Append("    ")
                        .AppendFormat("db.AddParameter(\"{0}\", {1}.Value);", paramName, unitParam.Name);
                    }
                    else
                    {
                        buff.Append(indentSpaceSub)
                        .AppendFormat("db.AddParameter(\"{0}\", {1});", paramName, unitParam.Name);
                    }
                    _unitMethod.Parameters.Add(unitParam);
                    break;

                case "keyword":
                    if (statementType == MethodStatementType.Select ||
                        statementType == MethodStatementType.SelectCount)
                    {
                        ///
                        buff.Append(indentSpaceSub)
                        .AppendLine("if (!string.IsNullOrEmpty(keyword))")
                        .Append(indentSpaceSub).Append("    ")
                        .AppendFormat("db.AddParameter(\"{0}\", {1});", paramName, unitParam.Name);
                    }
                    else
                    {
                        buff.Append(indentSpaceSub)
                        .AppendFormat("db.AddParameter(\"{0}\", {1});", paramName, unitParam.Name);
                    }
                    _unitMethod.Parameters.Add(unitParam);
                    break;

                case "criteria":
                    if (statementType == MethodStatementType.Select ||
                        statementType == MethodStatementType.SelectCount)
                    {
                        ///
                        buff.Append(indentSpaceSub)
                        .AppendLine("if (!string.IsNullOrEmpty(criteria))")
                        .Append(indentSpaceSub).Append("    ")
                        .AppendFormat("db.AddParameter(\"{0}\", {1});", paramName, unitParam.Name);
                    }
                    else
                    {
                        buff.Append(indentSpaceSub)
                        .AppendFormat("db.AddParameter(\"{0}\", {1});", paramName, unitParam.Name);
                    }
                    _unitMethod.Parameters.Add(unitParam);
                    break;

                case "operator":
                    buff.Append(indentSpaceSub)
                    .AppendFormat("Artem.Data.Access.Build.DalUtil.AddOperatorParam(db);");
                    break;

                default:
                    DalUtil.AddParamInStatement(buff, dbType, paramName, unitParam.Name, indentSpaceSub);
                    //buff.Append(indentSpaceSub)
                    //    .AppendFormat("db.AddParameter(\"{0}\", {1});", paramName, unitParam.Name);
                    _unitMethod.Parameters.Add(unitParam);
                    break;
                }
                buff.AppendLine();
            }
            switch (statementType)
            {
            case MethodStatementType.Common:
            case MethodStatementType.Delete:
            case MethodStatementType.Insert:
            case MethodStatementType.Update:
                buff.Append(indentSpaceSub).Append("db.ExecuteNonQuery();");
                break;

            case MethodStatementType.Get:
                buff.Append(indentSpaceSub).AppendFormat("return db.FetchObject<{0}>();", _unitClass.Name);
                break;

            case MethodStatementType.Select:
                buff.Append(indentSpaceSub).AppendFormat("return db.FetchCollection<{0}>();", _unitClass.Name);
                break;

            case MethodStatementType.SelectCount:
                buff.Append(indentSpaceSub).Append("return db.ExecuteScalar<int>();");
                break;
            }
            buff.AppendLine();
            buff.Append(indentSpace).Append("}");
            _unitMethod.Statements.Add(new CodeSnippetStatement(buff.ToString()));
            // if paging enabled add count method before go back
            //if (pagingFlags == PagingFlags.Enabled) {
            //    GenSelectCount();
            //}
        }