Last active
July 24, 2019 12:03
-
-
Save gionnani/1d52f4e63162d5da552d59bbedccecf6 to your computer and use it in GitHub Desktop.
Generate C# class from database table
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--modified from SO: http://stackoverflow.com/questions/5873170/generate-class-from-database-table | |
--added table and column | |
declare @TableName sysname = 'TableName' | |
declare @Result varchar(max) = '[Table(Name = "' + @TableName + '")] | |
public class ' + @TableName + ' | |
{' | |
select @Result = @Result + ' | |
[Column(DbType = "' + | |
Case | |
when ColumnDbType in ('nvarchar', 'nchar', 'varchar', 'char', 'datetime2', 'binary', 'datetimeoffset', 'time', 'varbinary') then ColumnDbType + '(' + cMlength + ')' | |
when ColumnDbType in ('decimal', 'numeric') then ColumnDbType + '(' + cPrecision + ',' + cScale +')' | |
else ColumnDbType end + '", ' + case ISPK when 'true' then 'IsPrimaryKey = true' else 'CanBeNull = ' + cNullable end +')] | |
public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; } | |
' | |
from | |
( | |
select distinct | |
replace(col.name, ' ', '_') ColumnName, | |
column_id ColumnId, | |
typ.name ColumnDbType, | |
convert(varchar, col.precision) cPrecision, | |
convert(varchar, col.scale) cScale, | |
convert(varchar, col.max_length) cMlength, | |
case col.is_nullable when 1 then 'true' else 'false' end cNullable, | |
pkk.ISPK, | |
case typ.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_' + typ.name | |
end ColumnType, | |
case | |
when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') | |
then '?' | |
else '' | |
end NullableSign | |
from sys.columns col | |
join sys.types typ on | |
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id | |
left join | |
( | |
SELECT c.name AS 'ColumnName', CASE WHEN dd.pk IS NULL THEN 'false' ELSE 'true' END ISPK | |
FROM sys.columns c | |
JOIN sys.tables t ON c.object_id = t.object_id | |
LEFT JOIN (SELECT K.COLUMN_NAME , C.CONSTRAINT_TYPE as pk | |
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K | |
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C | |
ON K.TABLE_NAME = C.TABLE_NAME | |
AND K.CONSTRAINT_NAME = C.CONSTRAINT_NAME | |
AND K.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG | |
AND K.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA | |
WHERE K.TABLE_NAME = @TableName) as dd | |
ON dd.COLUMN_NAME = c.name | |
WHERE t.name = @TableName | |
) pkk on ColumnName=col.name | |
where object_id = object_id(@TableName) | |
) t | |
order by ColumnId | |
set @Result = @Result + ' | |
}' | |
print @Result |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment