DECLARE @newline NVARCHAR(2) = CHAR(13) + CHAR(10),
@tab NVARCHAR(1) = CHAR(9),
@table_id INT,
@table_name NVARCHAR(50),
@namespace NVARCHAR(50) = 'insert.namespace.here'
DECLARE table_cursor CURSOR FOR
SELECT
t.object_id,
t.name
FROM
sys.tables t
ORDER BY
t.name
OPEN table_cursor
FETCH NEXT FROM table_cursor INTO @table_id, @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'namespace ' + @namespace + @newline
SET @sql = @sql + '{' + @newline
SET @sql = @sql + @tab + 'using System;' + @newline
SET @sql = @sql + @tab + 'using System.ComponentModel.DataAnnotations;' + @newline
SET @sql = @sql + @tab + 'using System.Linq;' + @newline
SET @sql = @sql + @tab + 'using System.Web;' + @newline + @newline + @newline
SET @sql = @sql + @tab + '[MetadataType(typeof(' + @table_name + 'Metadata))]' + @newline
SET @sql = @sql + @tab + 'public partial class ' + @table_name + @newline
SET @sql = @sql + @tab + '{' + @newline
/**************************************************************************
* Enumerate fields in class
**************************************************************************/
DECLARE @column_id INT,
@column_name NVARCHAR(50),
@type_name NVARCHAR(50),
@is_identity BIT,
@is_nullable BIT,
@is_rowguidcol BIT,
@max_length INT,
@definition NVARCHAR(MAX)
DECLARE column_cursor CURSOR FOR
SELECT
c.object_id,
c.name AS column_name,
CASE t.name
WHEN 'bigint' THEN 'long'
WHEN 'binary' THEN 'byte[]'
WHEN 'bit' THEN 'bool'
WHEN 'char' THEN 'string'
WHEN 'date' THEN 'DateTime'
WHEN 'datetime' THEN 'DateTime'
WHEN 'datetime2' THEN 'DateTime'
WHEN 'datetimeoffset' THEN 'DateTimeOffset'
WHEN 'decimal' THEN 'decimal'
WHEN 'float' THEN 'double'
WHEN 'image' THEN 'byte[]'
WHEN 'int' THEN 'int'
WHEN 'money' THEN 'decimal'
WHEN 'nchar' THEN 'string'
WHEN 'ntext' THEN 'string'
WHEN 'numeric' THEN 'decimal'
WHEN 'nvarchar' THEN 'string'
WHEN 'real' THEN 'float'
WHEN 'smalldatetime' THEN 'DateTime'
WHEN 'smallint' THEN 'short'
WHEN 'smallmoney' THEN 'decimal'
WHEN 'text' THEN 'string'
WHEN 'time' THEN 'TimeSpan'
WHEN 'timestamp' THEN 'long'
WHEN 'tinyint' THEN 'byte'
WHEN 'uniqueidentifier' THEN 'Guid'
WHEN 'varbinary' THEN 'byte[]'
WHEN 'varchar' THEN 'string'
ELSE 'UNKNOWN_' + t.name
END,
c.is_identity,
c.is_nullable,
c.is_rowguidcol,
c.max_length,
object_definition(c.default_object_id)
FROM
sys.columns c
INNER JOIN
sys.types t ON c.system_type_id = t.system_type_id
WHERE
t.name <> 'sysname'
AND c.object_id = @table_id
ORDER BY
c.is_identity DESC,
c.name
OPEN column_cursor
FETCH NEXT FROM column_cursor INTO
@column_id,
@column_name,
@type_name,
@is_identity,
@is_nullable,
@is_rowguidcol,
@max_length,
@definition
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = @sql + @tab + @tab + 'public ' + @type_name + ' ' + @column_name + ' { get; set; }' + @newline
FETCH NEXT FROM column_cursor INTO
@column_id,
@column_name,
@type_name,
@is_identity,
@is_nullable,
@is_rowguidcol,
@max_length,
@definition
END
SET @sql = @sql + @newline
CLOSE column_cursor
DEALLOCATE column_cursor
SET @sql = @sql + @tab + @tab + 'public static bool Create()' + @newline
SET @sql = @sql + @tab + @tab + '{' + @newline
SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
SET @sql = @sql + @tab + @tab + 'public static bool Read()' + @newline
SET @sql = @sql + @tab + @tab + '{' + @newline
SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
SET @sql = @sql + @tab + @tab + 'public static bool Update()' + @newline
SET @sql = @sql + @tab + @tab + '{' + @newline
SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
SET @sql = @sql + @tab + @tab + 'public static bool Delete()' + @newline
SET @sql = @sql + @tab + @tab + '{' + @newline
SET @sql = @sql + @tab + @tab + @tab + 'throw new NotImplementedException();' + @newline
SET @sql = @sql + @tab + @tab + '}' + @newline + @newline
SET @sql = @sql + @tab + @tab + 'private sealed class ' + @table_name + 'Metadata' + @newline
SET @sql = @sql + @tab + @tab + '{' + @newline
DECLARE column_cursor CURSOR FOR
SELECT
c.name
FROM
sys.columns c
WHERE
c.object_id = @table_id
AND c.is_nullable = 0
ORDER BY
c.name
OPEN column_cursor
FETCH NEXT FROM column_cursor INTO @column_name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = @sql + @tab + @tab + @tab + '[Display(Name = "' + @column_name + '", Prompt = "' + @column_name + '")]' + @newline
SET @sql = @sql + @tab + @tab + @tab + '[Required(AllowEmptyStrings = false, ErrorMessage = "' + @column_name + ' is required")]' + @newline
SET @sql = @sql + @tab + @tab + @tab + 'public ' + @type_name + ' ' + @column_name + ' { get; set; }' + @newline + @newline
FETCH NEXT FROM column_cursor INTO @column_name
END
CLOSE column_cursor
DEALLOCATE column_cursor
SET @sql = @sql + @tab + @tab + '}' + @newline
SET @sql = @sql + @tab + '}' + @newline
SET @sql = @sql + '}' + @newline + @newline
PRINT(@sql)
FETCH NEXT FROM table_cursor INTO @table_id, @table_name
END
CLOSE table_cursor
DEALLOCATE table_cursor
Comments
0 B
|👍
/👎
0 B
|👍
/👎