Exemple #1
0
        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());
        }