/// <summary> /// Creates a string that represents the "select by" functionality of the data access class. /// </summary> /// <param name="table">The Table instance that this method will be created for.</param> /// <param name="storedProcedurePrefix">The prefix that is used on the stored procedure that this method will call.</param> /// <param name="streamWriter">The StreamWriter instance that will be used to create the method.</param> private static void CreateSelectAllByMethods(Table table, string storedProcedurePrefix, TextWriter streamWriter) { string className = AppUtility.FormatClassName(table.Name); string dtoVariableName = AppUtility.FormatCamel(className); // Create a stored procedure for each foreign key foreach (List <Column> compositeKeyList in table.ForeignKeys.Values) { // Create the stored procedure name StringBuilder stringBuilder = new StringBuilder(255); stringBuilder.Append("SelectAllBy"); for (var i = 0; i < compositeKeyList.Count; i++) { var column = compositeKeyList[i]; if (i > 0) { stringBuilder.Append("_" + AppUtility.FormatPascal(column.Name)); } else { stringBuilder.Append(AppUtility.FormatPascal(column.Name)); } } string methodName = stringBuilder.ToString(); string procedureName = storedProcedurePrefix + table.Name + methodName; // Create the select function based on keys // Append the method header streamWriter.WriteLine("\t\t/// <summary>"); streamWriter.WriteLine("\t\t/// Selects all records from the " + table.Name + " table by a foreign key."); streamWriter.WriteLine("\t\t/// </summary>"); streamWriter.Write("\t\tpublic List<" + className + "> " + methodName + "("); for (int i = 0; i < compositeKeyList.Count; i++) { Column column = compositeKeyList[i]; streamWriter.Write(AppUtility.CreateMethodParameter(column)); if (i < (compositeKeyList.Count - 1)) { streamWriter.Write(","); } } streamWriter.WriteLine(")"); streamWriter.WriteLine("\t\t{"); streamWriter.WriteLine("\t\t\t using (var vConn = OpenConnection())"); streamWriter.WriteLine("\t\t\t\t {"); streamWriter.WriteLine("\t\t\t\t var vParams = new DynamicParameters();"); for (var i = 0; i < compositeKeyList.Count; i++) { var column = compositeKeyList[i]; streamWriter.WriteLine("\t\t\t\t\t vParams.Add(\"@" + column.Name + "\"," + AppUtility.FormatCamel(column.Name) + ");"); } streamWriter.WriteLine("\t\t\t\t return vConn.Query<" + className + ">(\"" + table.Name + "SelectAll\", vParams, commandType: CommandType.StoredProcedure).ToList();"); streamWriter.WriteLine("\t\t\t\t }"); streamWriter.WriteLine("\t\t}"); streamWriter.WriteLine(); } }
/// <summary> /// Creates a C# Model /POCO class for all of the table's of Database. /// </summary> /// <param name="databaseName">The name of the database.</param> /// <param name="table">Instance of the Table class that represents the table this class will be created for.</param> /// <param name="targetNamespace">The namespace that the generated C# classes should contained in.</param> /// <param name="storedProcedurePrefix">Prefix to be appended to the name of the stored procedure.</param> /// <param name="path">Path where the class should be created.</param> internal static void CreateModelClass(string databaseName, Table table, string targetNamespace, string storedProcedurePrefix, string path) { var className = AppUtility.FormatClassName(table.Name); using (var streamWriter = new StreamWriter(Path.Combine(path, className + ".cs"))) { #region Create the header for the class streamWriter.WriteLine("using System;"); streamWriter.WriteLine(); streamWriter.WriteLine("namespace " + targetNamespace); streamWriter.WriteLine("{"); streamWriter.WriteLine("\tpublic class " + className); streamWriter.WriteLine("\t{"); #endregion #region Append the public properties streamWriter.WriteLine("\t\t#region Properties"); for (var i = 0; i < table.Columns.Count; i++) { var column = table.Columns[i]; var parameter = AppUtility.CreateMethodParameter(column); var type = parameter.Split(' ')[0]; var name = parameter.Split(' ')[1]; streamWriter.WriteLine("\t\t/// <summary>"); streamWriter.WriteLine("\t\t/// Gets or sets the " + AppUtility.FormatPascal(name) + " value."); streamWriter.WriteLine("\t\t/// </summary>"); streamWriter.WriteLine("\t\tpublic " + type + " " + AppUtility.FormatPascal(name)); streamWriter.WriteLine("\t\t{ get; set; }"); if (i < (table.Columns.Count - 1)) { streamWriter.WriteLine(); } } streamWriter.WriteLine(); streamWriter.WriteLine("\t\t#endregion"); #endregion // Close out the class and namespace streamWriter.WriteLine("\t}"); streamWriter.WriteLine("}"); } }