SQL 和 c# Emtity的相互转换

相信大家在开发中,都遇到一个问题 ,如 json 和emtity 的转换  

sql和emtity 的转换  

在线工具里面很多json  xml   emtity 的互转工具 ,层出不穷

唯独 sql和实体的转换很少很少 

好了 ,话归真题...

 1 ALTER PROC P_SqlToEmtity 
 2 @TableName SYSNAME ---表名
 3 AS
 4 DECLARE @Result NVARCHAR(MAX) = N'public class ' + @TableName + N'
 5 {';
 6 
 7 SELECT @Result = @Result + N'
 8 public ' + ColumnType + NullableSign + N' ' + ColumnName + N' { get; set; }
 9 '
10 FROM
11 (
12 SELECT REPLACE(col.NAME, ' ', '_') ColumnName,
13 column_id ColumnId,
14 CASE typ.name
15 WHEN 'bigint'    THEN 'long'
16 WHEN 'binary'    THEN 'byte[]'
17 WHEN 'bit'    THEN 'bool'
18 WHEN 'char'    THEN 'string'
19 WHEN 'date'    THEN 'DateTime'
20 WHEN 'datetime'    THEN 'DateTime'
21 WHEN 'datetime2'    THEN 'DateTime'
22 WHEN 'datetimeoffset'    THEN 'DateTimeOffset'
23 WHEN 'decimal'    THEN 'decimal'
24 WHEN 'float'    THEN 'float'
25 WHEN 'image'    THEN 'byte[]'
26 WHEN 'int'    THEN 'int'
27 WHEN 'money'    THEN 'decimal'
28 WHEN 'nchar'    THEN 'string'
29 WHEN 'ntext'    THEN 'string'
30 WHEN 'numeric'    THEN 'decimal'
31 WHEN 'nvarchar'    THEN 'string'
32 WHEN 'real'    THEN 'double'
33 WHEN 'smalldatetime'    THEN 'DateTime'
34 WHEN 'smallint'    THEN 'short'
35 WHEN 'smallmoney'    THEN 'decimal'
36 WHEN 'text'    THEN 'string'
37 WHEN 'time'    THEN 'TimeSpan'
38 WHEN 'timestamp'    THEN 'DateTime'
39 WHEN 'tinyint'    THEN 'byte'
40 WHEN 'uniqueidentifier'    THEN 'Guid'
41 WHEN 'varbinary'    THEN 'byte[]'
42 WHEN 'NVARCHAR'    THEN 'string'
43 ELSE 'UNKNOWN_' + typ.NAME
44 END ColumnType,
45 CASE
46 WHEN col.is_nullable = 1
47 AND typ.name IN ( 'bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal',
48 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint',
49 'smallmoney', 'time', 'tinyint', 'uniqueidentifier'
50 ) THEN
51 '?'
52 ELSE
53 ''
54 END NullableSign
55 FROM sys.columns col
56 JOIN sys.types typ
57 ON col.system_type_id = typ.system_type_id
58 AND col.user_type_id = typ.user_type_id
59 WHERE object_id = OBJECT_ID(@TableName)
60 ) t
61 ORDER BY ColumnId;
62 
63 SET @Result = @Result + N'
64 }'
65 
66 PRINT @Result

 

Code

 

posted @ 2019-07-02 10:02  _文正  阅读(202)  评论(0编辑  收藏  举报