7272 Regex StoredProcedureFilterInclude = null;
7373 Func<Table, bool> TableFilter;
7474 Func<Table, bool> ConfigurationFilter;
75- Dictionary<string, string> StoredProcedureReturnTypes = new Dictionary<string, string>();
75+ static Dictionary<string, string> StoredProcedureReturnTypes = new Dictionary<string, string>();
7676 Regex ColumnFilterExclude = null;
7777 string[] ConfigFilenameSearchOrder = null;
7878 string[] AdditionalNamespaces = null;
123123 return true;
124124 };
125125
126+
126127 public const string DataDirectory = "|DataDirectory|";
127128
128129 static readonly List<string> NotNullable = new List<string>
@@ -3061,4 +3062,179 @@ SELECT SERVERPROPERTY('Edition') AS Edition,
30613062 }
30623063 }
30633064 }
3065+
3066+ // ***********************************************************************
3067+ // ** Stored procedure callbacks
3068+
3069+ public static readonly Func<StoredProcedure, string> WriteStoredProcFunctionName = sp => sp.NameHumanCase;
3070+
3071+ public static readonly Func<StoredProcedure, bool> StoredProcHasOutParams = (sp) =>
3072+ {
3073+ return sp.Parameters.Any(x => x.Mode != StoredProcedureParameterMode.In);
3074+ };
3075+
3076+ public static readonly Func<StoredProcedure, bool, string> WriteStoredProcFunctionParams = (sp, includeProcResult) =>
3077+ {
3078+ var sb = new StringBuilder();
3079+ int n = 1;
3080+ int count = sp.Parameters.Count;
3081+ foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
3082+ {
3083+ sb.AppendFormat("{0}{1}{2} {3}{4}",
3084+ p.Mode == StoredProcedureParameterMode.In ? "" : "out ",
3085+ p.PropertyType,
3086+ NotNullable.Contains(p.PropertyType.ToLower()) ? string.Empty : "?",
3087+ p.NameHumanCase,
3088+ (n++ < count) ? ", " : string.Empty);
3089+ }
3090+ if (includeProcResult && sp.ReturnModels.Count > 0 && sp.ReturnModels.First().Count > 0)
3091+ sb.AppendFormat((sp.Parameters.Count > 0 ? ", " : "") + "out int procResult");
3092+ return sb.ToString();
3093+ };
3094+
3095+ public static readonly Func<StoredProcedure, string> WriteStoredProcFunctionOverloadCall = (sp) =>
3096+ {
3097+ var sb = new StringBuilder();
3098+ foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
3099+ {
3100+ sb.AppendFormat("{0}{1}, ",
3101+ p.Mode == StoredProcedureParameterMode.In ? "" : "out ",
3102+ p.NameHumanCase);
3103+ }
3104+ sb.Append("out procResult");
3105+ return sb.ToString();
3106+ };
3107+
3108+ public static readonly Func<StoredProcedure, string> WriteStoredProcFunctionSqlAtParams = sp =>
3109+ {
3110+ var sb = new StringBuilder();
3111+ int n = 1;
3112+ int count = sp.Parameters.Count;
3113+ foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
3114+ {
3115+ sb.AppendFormat("{0}{1}{2}",
3116+ p.Name,
3117+ p.Mode == StoredProcedureParameterMode.In ? string.Empty : " OUTPUT",
3118+ (n++ < count) ? ", " : string.Empty);
3119+ }
3120+ return sb.ToString();
3121+ };
3122+
3123+ public static readonly Func<StoredProcedureParameter, string> WriteStoredProcSqlParameterName = p => p.NameHumanCase + "Param";
3124+
3125+ public static readonly Func<StoredProcedure, bool, string> WriteStoredProcFunctionDeclareSqlParameter = (sp, includeProcResult) =>
3126+ {
3127+ var sb = new StringBuilder();
3128+ foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
3129+ {
3130+ bool isNullable = !NotNullable.Contains(p.PropertyType.ToLower());
3131+ var getValueOrDefault = isNullable ? ".GetValueOrDefault()" : string.Empty;
3132+
3133+ sb.AppendLine(string.Format(" var {0} = new System.Data.SqlClient.SqlParameter {{ ParameterName = \"{1}\", SqlDbType = System.Data.SqlDbType.{2}, Direction = System.Data.ParameterDirection.{3}{4}{5}{6}{7} }};",
3134+ WriteStoredProcSqlParameterName(p),
3135+ p.Name,
3136+ p.SqlDbType,
3137+ p.Mode == StoredProcedureParameterMode.In ? "Input" : "Output",
3138+ p.Mode == StoredProcedureParameterMode.In ? ", Value = " + p.NameHumanCase + getValueOrDefault : string.Empty,
3139+ p.MaxLength != 0 ? ", Size = " + p.MaxLength : string.Empty,
3140+ (p.Precision > 0 || p.Scale > 0) ? ", Precision = " + p.Precision + ", Scale = " + p.Scale : string.Empty,
3141+ p.PropertyType.ToLower().Contains("datatable") ? ", TypeName = \"" + p.UserDefinedTypeName + "\"" : string.Empty));
3142+
3143+ if (p.Mode == StoredProcedureParameterMode.In)
3144+ {
3145+ sb.AppendFormat(
3146+ isNullable
3147+ ? " if (!{0}.HasValue){1} {0}Param.Value = System.DBNull.Value;{1}{1}"
3148+ : " if ({0}Param.Value == null){1} {0}Param.Value = System.DBNull.Value;{1}{1}",
3149+ p.NameHumanCase, Environment.NewLine);
3150+ }
3151+ }
3152+ if(includeProcResult && sp.ReturnModels.Count < 2)
3153+ sb.AppendLine(" var procResultParam = new System.Data.SqlClient.SqlParameter { ParameterName = \"@procResult\", SqlDbType = System.Data.SqlDbType.Int, Direction = System.Data.ParameterDirection.Output };");
3154+ return sb.ToString();
3155+ };
3156+
3157+ public static readonly Func<StoredProcedure, string> WriteTableValuedFunctionDeclareSqlParameter = sp =>
3158+ {
3159+ var sb = new StringBuilder();
3160+ foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
3161+ {
3162+ sb.AppendLine(string.Format(" var {0}Param = new System.Data.Entity.Core.Objects.ObjectParameter(\"{1}\", typeof({2})) {{ Value = {3} }};",
3163+ p.NameHumanCase,
3164+ p.Name.Substring(1),
3165+ p.PropertyType,
3166+ p.NameHumanCase + (p.Mode == StoredProcedureParameterMode.In && NotNullable.Contains(p.PropertyType.ToLowerInvariant()) ? string.Empty : ".GetValueOrDefault()" )));
3167+ }
3168+ return sb.ToString();
3169+ };
3170+
3171+ public static readonly Func<StoredProcedure, bool, string> WriteStoredProcFunctionSqlParameterAnonymousArray = (sp, includeProcResultParam) =>
3172+ {
3173+ var sb = new StringBuilder();
3174+ bool hasParam = false;
3175+ foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
3176+ {
3177+ sb.Append(string.Format("{0}Param, ", p.NameHumanCase));
3178+ hasParam = true;
3179+ }
3180+ if (includeProcResultParam)
3181+ sb.Append("procResultParam");
3182+ else if(hasParam)
3183+ sb.Remove(sb.Length - 2, 2);
3184+ return sb.ToString();
3185+ };
3186+
3187+ public static readonly Func<StoredProcedure, string> WriteTableValuedFunctionSqlParameterAnonymousArray = sp =>
3188+ {
3189+ if (sp.Parameters.Count == 0)
3190+ return "new System.Data.Entity.Core.Objects.ObjectParameter[] { }";
3191+ var sb = new StringBuilder();
3192+ foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
3193+ {
3194+ sb.Append(string.Format("{0}Param, ", p.NameHumanCase));
3195+ }
3196+ return sb.ToString().Substring(0, sb.Length - 2);
3197+ };
3198+
3199+ public static readonly Func<StoredProcedure, bool, string> WriteStoredProcFunctionSetSqlParameters = (sp, isFake) =>
3200+ {
3201+ var sb = new StringBuilder();
3202+ foreach (var p in sp.Parameters.Where(x => x.Mode != StoredProcedureParameterMode.In).OrderBy(x => x.Ordinal))
3203+ {
3204+ string Default = string.Format("default({0})", p.PropertyType);
3205+ bool notNullable = NotNullable.Contains(p.PropertyType.ToLower());
3206+
3207+ if(isFake)
3208+ sb.AppendLine(string.Format(" {0} = {1};", p.NameHumanCase, Default));
3209+ else
3210+ {
3211+ sb.AppendLine(string.Format(" if (IsSqlParameterNull({0}Param))", p.NameHumanCase));
3212+ sb.AppendLine(string.Format(" {0} = {1};", p.NameHumanCase, notNullable ? Default : "null"));
3213+ sb.AppendLine(" else");
3214+ sb.AppendLine(string.Format(" {0} = ({1}) {2}Param.Value;", p.NameHumanCase, p.PropertyType, p.NameHumanCase));
3215+ }
3216+ }
3217+ return sb.ToString();
3218+ };
3219+
3220+ public static readonly Func<StoredProcedure, string> WriteStoredProcReturnModelName = sp =>
3221+ StoredProcedureReturnTypes.ContainsKey(sp.NameHumanCase)
3222+ ? StoredProcedureReturnTypes[sp.NameHumanCase]
3223+ : StoredProcedureReturnTypes.ContainsKey(sp.Name)
3224+ ? StoredProcedureReturnTypes[sp.Name]
3225+ : string.Format("{0}ReturnModel", sp.NameHumanCase);
3226+
3227+ public static readonly Func<DataColumn, string> WriteStoredProcReturnColumn = col =>
3228+ string.Format("public {0} {1} {{ get; set; }}",
3229+ StoredProcedure.WrapTypeIfNullable("System." + col.DataType.Name,col), col.ColumnName);
3230+
3231+ public static readonly Func<StoredProcedure, string> WriteStoredProcReturnType = (sp) =>
3232+ {
3233+ var returnModelCount = sp.ReturnModels.Count;
3234+ if (returnModelCount == 0)
3235+ return "int";
3236+
3237+ var spReturnClassName = WriteStoredProcReturnModelName(sp);
3238+ return (returnModelCount == 1) ? string.Format("System.Collections.Generic.List<{0}>", spReturnClassName) : spReturnClassName;
3239+ };
30643240#>
0 commit comments