Skip to content

Commit 7759fda

Browse files
committed
Moved stored procedures callbacks out of settings file
1 parent 029da72 commit 7759fda

File tree

2 files changed

+177
-179
lines changed

2 files changed

+177
-179
lines changed

EntityFramework.Reverse.POCO.Generator/Database.tt

Lines changed: 0 additions & 178 deletions
Original file line numberDiff line numberDiff line change
@@ -322,184 +322,6 @@
322322
// That's it, nothing else to configure ***********************************************************************************************
323323

324324

325-
// ***********************************************************************
326-
// ** Experienced developers only below this point
327-
328-
Func<StoredProcedure, string> WriteStoredProcFunctionName = sp => sp.NameHumanCase;
329-
330-
Func<StoredProcedure, bool> StoredProcHasOutParams = (sp) =>
331-
{
332-
return sp.Parameters.Any(x => x.Mode != StoredProcedureParameterMode.In);
333-
};
334-
335-
Func<StoredProcedure, bool, string> WriteStoredProcFunctionParams = (sp, includeProcResult) =>
336-
{
337-
var sb = new StringBuilder();
338-
int n = 1;
339-
int count = sp.Parameters.Count;
340-
foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
341-
{
342-
sb.AppendFormat("{0}{1}{2} {3}{4}",
343-
p.Mode == StoredProcedureParameterMode.In ? "" : "out ",
344-
p.PropertyType,
345-
NotNullable.Contains(p.PropertyType.ToLower()) ? string.Empty : "?",
346-
p.NameHumanCase,
347-
(n++ < count) ? ", " : string.Empty);
348-
}
349-
if (includeProcResult && sp.ReturnModels.Count > 0 && sp.ReturnModels.First().Count > 0)
350-
sb.AppendFormat((sp.Parameters.Count > 0 ? ", " : "") + "out int procResult");
351-
return sb.ToString();
352-
};
353-
354-
Func<StoredProcedure, string> WriteStoredProcFunctionOverloadCall = (sp) =>
355-
{
356-
var sb = new StringBuilder();
357-
foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
358-
{
359-
sb.AppendFormat("{0}{1}, ",
360-
p.Mode == StoredProcedureParameterMode.In ? "" : "out ",
361-
p.NameHumanCase);
362-
}
363-
sb.Append("out procResult");
364-
return sb.ToString();
365-
};
366-
367-
Func<StoredProcedure, string> WriteStoredProcFunctionSqlAtParams = sp =>
368-
{
369-
var sb = new StringBuilder();
370-
int n = 1;
371-
int count = sp.Parameters.Count;
372-
foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
373-
{
374-
sb.AppendFormat("{0}{1}{2}",
375-
p.Name,
376-
p.Mode == StoredProcedureParameterMode.In ? string.Empty : " OUTPUT",
377-
(n++ < count) ? ", " : string.Empty);
378-
}
379-
return sb.ToString();
380-
};
381-
382-
Func<StoredProcedureParameter, string> WriteStoredProcSqlParameterName = p => p.NameHumanCase + "Param";
383-
384-
Func<StoredProcedure, bool, string> WriteStoredProcFunctionDeclareSqlParameter = (sp, includeProcResult) =>
385-
{
386-
var sb = new StringBuilder();
387-
foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
388-
{
389-
bool isNullable = !NotNullable.Contains(p.PropertyType.ToLower());
390-
var getValueOrDefault = isNullable ? ".GetValueOrDefault()" : string.Empty;
391-
392-
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} }};",
393-
WriteStoredProcSqlParameterName(p),
394-
p.Name,
395-
p.SqlDbType,
396-
p.Mode == StoredProcedureParameterMode.In ? "Input" : "Output",
397-
p.Mode == StoredProcedureParameterMode.In ? ", Value = " + p.NameHumanCase + getValueOrDefault : string.Empty,
398-
p.MaxLength != 0 ? ", Size = " + p.MaxLength : string.Empty,
399-
(p.Precision > 0 || p.Scale > 0) ? ", Precision = " + p.Precision + ", Scale = " + p.Scale : string.Empty,
400-
p.PropertyType.ToLower().Contains("datatable") ? ", TypeName = \"" + p.UserDefinedTypeName + "\"" : string.Empty));
401-
402-
if (p.Mode == StoredProcedureParameterMode.In)
403-
{
404-
sb.AppendFormat(
405-
isNullable
406-
? " if (!{0}.HasValue){1} {0}Param.Value = System.DBNull.Value;{1}{1}"
407-
: " if ({0}Param.Value == null){1} {0}Param.Value = System.DBNull.Value;{1}{1}",
408-
p.NameHumanCase, Environment.NewLine);
409-
}
410-
}
411-
if(includeProcResult && sp.ReturnModels.Count < 2)
412-
sb.AppendLine(" var procResultParam = new System.Data.SqlClient.SqlParameter { ParameterName = \"@procResult\", SqlDbType = System.Data.SqlDbType.Int, Direction = System.Data.ParameterDirection.Output };");
413-
return sb.ToString();
414-
};
415-
416-
Func<StoredProcedure, string> WriteTableValuedFunctionDeclareSqlParameter = sp =>
417-
{
418-
var sb = new StringBuilder();
419-
foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
420-
{
421-
sb.AppendLine(string.Format(" var {0}Param = new System.Data.Entity.Core.Objects.ObjectParameter(\"{1}\", typeof({2})) {{ Value = {3} }};",
422-
p.NameHumanCase,
423-
p.Name.Substring(1),
424-
p.PropertyType,
425-
p.NameHumanCase + (p.Mode == StoredProcedureParameterMode.In && NotNullable.Contains(p.PropertyType.ToLowerInvariant()) ? string.Empty : ".GetValueOrDefault()" )));
426-
}
427-
return sb.ToString();
428-
};
429-
430-
Func<StoredProcedure, bool, string> WriteStoredProcFunctionSqlParameterAnonymousArray = (sp, includeProcResultParam) =>
431-
{
432-
var sb = new StringBuilder();
433-
bool hasParam = false;
434-
foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
435-
{
436-
sb.Append(string.Format("{0}Param, ", p.NameHumanCase));
437-
hasParam = true;
438-
}
439-
if (includeProcResultParam)
440-
sb.Append("procResultParam");
441-
else if(hasParam)
442-
sb.Remove(sb.Length - 2, 2);
443-
return sb.ToString();
444-
};
445-
446-
Func<StoredProcedure, string> WriteTableValuedFunctionSqlParameterAnonymousArray = sp =>
447-
{
448-
if (sp.Parameters.Count == 0)
449-
return "new System.Data.Entity.Core.Objects.ObjectParameter[] { }";
450-
var sb = new StringBuilder();
451-
foreach (var p in sp.Parameters.OrderBy(x => x.Ordinal))
452-
{
453-
sb.Append(string.Format("{0}Param, ", p.NameHumanCase));
454-
}
455-
return sb.ToString().Substring(0, sb.Length - 2);
456-
};
457-
458-
Func<StoredProcedure, bool, string> WriteStoredProcFunctionSetSqlParameters = (sp, isFake) =>
459-
{
460-
var sb = new StringBuilder();
461-
foreach (var p in sp.Parameters.Where(x => x.Mode != StoredProcedureParameterMode.In).OrderBy(x => x.Ordinal))
462-
{
463-
string Default = string.Format("default({0})", p.PropertyType);
464-
bool notNullable = NotNullable.Contains(p.PropertyType.ToLower());
465-
466-
if(isFake)
467-
sb.AppendLine(string.Format(" {0} = {1};", p.NameHumanCase, Default));
468-
else
469-
{
470-
sb.AppendLine(string.Format(" if (IsSqlParameterNull({0}Param))", p.NameHumanCase));
471-
sb.AppendLine(string.Format(" {0} = {1};", p.NameHumanCase, notNullable ? Default : "null"));
472-
sb.AppendLine(" else");
473-
sb.AppendLine(string.Format(" {0} = ({1}) {2}Param.Value;", p.NameHumanCase, p.PropertyType, p.NameHumanCase));
474-
}
475-
}
476-
return sb.ToString();
477-
};
478-
479-
Func<StoredProcedure, string> WriteStoredProcReturnModelName = sp =>
480-
StoredProcedureReturnTypes.ContainsKey(sp.NameHumanCase)
481-
? StoredProcedureReturnTypes[sp.NameHumanCase]
482-
: StoredProcedureReturnTypes.ContainsKey(sp.Name)
483-
? StoredProcedureReturnTypes[sp.Name]
484-
: string.Format("{0}ReturnModel", sp.NameHumanCase);
485-
486-
Func<DataColumn, string> WriteStoredProcReturnColumn = col =>
487-
string.Format("public {0} {1} {{ get; set; }}",
488-
StoredProcedure.WrapTypeIfNullable("System." + col.DataType.Name,col), col.ColumnName);
489-
490-
Func<StoredProcedure, string> WriteStoredProcReturnType = (sp) =>
491-
{
492-
var returnModelCount = sp.ReturnModels.Count;
493-
if (returnModelCount == 0)
494-
return "int";
495-
496-
var spReturnClassName = WriteStoredProcReturnModelName(sp);
497-
return (returnModelCount == 1) ? string.Format("System.Collections.Generic.List<{0}>", spReturnClassName) : spReturnClassName;
498-
};
499-
500-
501-
502-
503325
// Read schema
504326
var factory = GetDbProviderFactory();
505327
IsSqlCe = IsSqlCeConnection(factory);

EntityFramework.Reverse.POCO.Generator/EF.Reverse.POCO.Core.ttinclude

Lines changed: 177 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
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;
@@ -123,6 +123,7 @@
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

Comments
 (0)