예제 #1
0
        /// <summary>
        /// Creates the column list.
        /// </summary>
        /// <param name="table">The table.</param>
        /// <param name="classDecl">The class decl.</param>
        protected virtual void CreateColumnList(TableSchema table, ClassDeclaration classDecl)
        {
            ClassDeclaration cols = new ClassDeclaration(classDecl.Name + "Columns");
            var columns = table.Columns
                                            .GroupBy(c => { return c.Name; })
                                            .Select(g => { return g.ElementAt(0); });
            foreach (ColumnSchema column in columns)
            {
                string columnName = column.IsPrimaryKey ? "ID" : column.Name;
                FieldDeclaration field = new FieldDeclaration(columnName, typeof(string))
                                    .IsPublic()
                                    .InitializeTo("\"" + columnName + "\"");
                field.AddComment("This column is of type {0}{1}({2} in .NET) and can{3} be null.",
                    column.SqlType.ToString().ToLower(),
                    column.Length > 0 ? String.Format("({0})", column.Length) : "",
                    column.DataType.Name,
                    column.Nullable ? "" : "NOT");
                cols.AddField(field);

            }
            classDecl.AddClass(cols);

            FieldDeclaration columnsField = new FieldDeclaration("_columns", new CodeDomTypeReference(cols.Name)).IsStatic();
            columnsField.AddInitializer(new CodeDomTypeReference(cols.Name));
            PropertyDeclaration columnsProperty =
                new PropertyDeclaration("Columns", columnsField, new CodeDomTypeReference(cols.Name))
                .IsStatic().IsReadOnly();
            columnsProperty.AddComment("Gets an instance of the {0} class which contains all of the column names for {1}.", cols.Name, classDecl.Name);
            classDecl.AddProperty(columnsProperty);
        }