public string GenerateClass(Table table, string rootNamespace, Db model, string safedCode = "") { StringBuilder builder = new StringBuilder(); string @namespace = rootNamespace; StringCollection addedNameSpaces = new StringCollection(); addedNameSpaces.Add(NamingUtility.GetFullNamespace(rootNamespace, table.Name)); // @@@ scafftools makedomain generated @@@ // @@@ at 01.06.2015 00:43:59 @@@ builder.AppendLine("// @@@ scafftools makedomain generated @@@"); builder.AppendFormat("// @@@ at {0} @@@\r\n", DateTime.Now); //set using statements builder.AppendLine(""); builder.AppendLine("using System;"); builder.AppendLine("using System.Collections.Generic;"); foreach (var relation in table.Relations) { var nms = NamingUtility.GetFullNamespace(@namespace, relation.OuterTable.Name); if (!addedNameSpaces.Contains(nms)) { builder.AppendFormat("using {0};\r\n", nms); addedNameSpaces.Add(nms); } } foreach (var outTable in model.Tables.Where(t => t.Name != table.Name).ToList()) { foreach (var relation in outTable.Relations.Where(r => r.OuterTable.Name == table.Name)) { var nms = NamingUtility.GetFullNamespace(@namespace, outTable.Name); if (!addedNameSpaces.Contains(nms)) { builder.AppendFormat("using {0};\r\n", nms); addedNameSpaces.Add(nms); } } } builder.AppendLine(""); //namespace builder.AppendFormat("namespace {0}\r\n", NamingUtility.GetFullNamespace(rootNamespace, table.Name)); builder.AppendLine("{"); //class var className = NamingUtility.RemoveSFromName(NamingUtility.GetCleanTableName(table.Name)); builder.AppendFormat("\tpublic class {0}\r\n", className); builder.AppendFormat("\t"); builder.Append("{"); builder.AppendFormat("\r\n"); foreach (var field in table.Columns) { string typeName = GetTypeName(field.Type); bool nullable = false; if (GetTypeNameType(typeName).IsValueType&& field.CanBeNull) { nullable = true; } //property builder.AppendLine("\t\t// @@@ scafftools property generated @@@"); builder.AppendFormat("\t\tpublic {0}{1} {2} ", typeName, nullable == true ? "?" : "", field.Name); builder.Append("{ get; set; }"); builder.AppendFormat("\r\n"); //end of property } foreach (var relation in table.Relations) { var propertyName = NamingUtility.RemoveIdFromName(relation.UniqueColumnKey.Name); var cleanTableName = NamingUtility.GetCleanTableName(relation.OuterTable.Name); builder.AppendLine("\t\t// @@@ scafftools makedomain generated @@@"); builder.AppendFormat("\t\tpublic virtual {0} {1} ", NamingUtility.RemoveSFromName(cleanTableName), propertyName); builder.Append("{ get; set; }"); builder.AppendFormat("\r\n"); } var outTables = model.Tables.Where(t => t.Name != table.Name).ToList();// && table.Relations.Any(a => a.OuterTable.Name == table.Name)).ToList(); //t.Name != table.Name && foreach (var outTable in outTables) { foreach (var relation in outTable.Relations.Where(r => r.OuterTable.Name == table.Name)) { var propertyName = NamingUtility.GetCleanTableName(outTable.Name); builder.AppendLine("\t\t// @@@ scafftools makedomain generated @@@"); builder.AppendFormat("\t\tpublic virtual ICollection<{0}> {1} ", NamingUtility.RemoveSFromName(NamingUtility.GetCleanTableName(outTable.Name)), propertyName); builder.Append("{ get; set; }"); builder.AppendFormat("\r\n"); } } //back safed code if (safedCode != string.Empty) { builder.Append(safedCode); } //end of class builder.AppendFormat("\t"); builder.Append("}"); builder.AppendFormat("\r\n"); //end of namespace builder.AppendLine("}"); return(builder.ToString()); }