存储过程生成POCO
下面我们演示使用T-SQL写的一个存储过程,生成C#的POCO代码:
CREATE PROCEDURE usp_TableToClass
/*
Generates C# class code for a table
and fields/properties for each column.
Run as "Results to Text" or "Results to File" (not Grid)
Example: EXEC usp_TableToClass 'MyTable'
*/
@table_name SYSNAME
AS
SET NOCOUNT ON
DECLARE @temp TABLE
(
sort INT,
code TEXT
)
INSERT INTO @temp
SELECT 1, 'public class ' + @table_name + CHAR(13) + CHAR(10) + '{' INSERT INTO @temp
SELECT 2, CHAR(13) + CHAR(10) + '#region Constructors' + CHAR(13) + CHAR(10)
INSERT INTO @temp
SELECT 3, CHAR(9) + 'public ' + @table_name + '()'
+ CHAR(13) + CHAR(10) + CHAR(9) + '{' + CHAR(13) + CHAR(10) + CHAR(9) + '}'
INSERT INTO @temp
SELECT 4, '#endregion' + CHAR(13) + CHAR(10)
INSERT INTO @temp
SELECT 5, '#region Private Fields' + CHAR(13) + CHAR(10)
INSERT INTO @temp
SELECT 6, CHAR(9) + 'private ' +
CASE
WHEN DATA_TYPE LIKE '%CHAR%' THEN 'string '
WHEN DATA_TYPE LIKE '%INT%' THEN 'int '
WHEN DATA_TYPE LIKE '%DATETIME%' THEN 'DateTime '
WHEN DATA_TYPE LIKE '%BINARY%' THEN 'byte[] '
WHEN DATA_TYPE = 'BIT' THEN 'bool '
WHEN DATA_TYPE LIKE '%TEXT%' THEN 'string '
ELSE 'object '
END + '_' + COLUMN_NAME + ';' + CHAR(9)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION
INSERT INTO @temp
SELECT 7, '#endregion' +
CHAR(13) + CHAR(10)
INSERT INTO @temp
SELECT 8, '#region Public Properties' + CHAR(13) + CHAR(10)
INSERT INTO @temp
SELECT 9, CHAR(9) + 'public ' +
CASE
WHEN DATA_TYPE LIKE '%CHAR%' THEN 'string '
WHEN DATA_TYPE LIKE '%INT%' THEN 'int '
WHEN DATA_TYPE LIKE '%DATETIME%' THEN 'DateTime '
WHEN DATA_TYPE LIKE '%BINARY%' THEN 'byte[] '
WHEN DATA_TYPE = 'BIT' THEN 'bool '
WHEN DATA_TYPE LIKE '%TEXT%' THEN 'string '
ELSE 'object '
END + COLUMN_NAME +
CHAR(13) + CHAR(10) + CHAR(9) + '{' + CHAR(13) + CHAR(10) + CHAR(9) + CHAR(9) +
'get { return _' + COLUMN_NAME + '; }' + CHAR(13) + CHAR(10) + CHAR(9) + CHAR(9) +
'set { _' + COLUMN_NAME + ' = value; }' + CHAR(13) + CHAR(10) + CHAR(9) + '}'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION
INSERT INTO @temp
SELECT 10, '#endregion' +
CHAR(13) + CHAR(10) + '}'
SELECT code FROM @temp
ORDER BY sort
在DB中创建好后,怎么用呢?例如下面我们以 aspnet_Membership表为例:
EXEC usp_TableToClass aspnet_Membership
接着生成这样的CSharp代码,不包含行号:
1: public class aspnet_Membership
2: { 3:
4: #region Constructors
5: public aspnet_Membership()
6: { 7: }
8: #endregion
9: #region Private Fields
10: private object _ApplicationId;
11: private object _UserId;
12: private string _Password;
13: private int _PasswordFormat;
14: private string _PasswordSalt;
15: private string _MobilePIN;
16: private string _Email;
17: private string _LoweredEmail;
18: private string _PasswordQuestion;
19: private string _PasswordAnswer;
20: private bool _IsApproved;
21: private bool _IsLockedOut;
22: private DateTime _CreateDate;
23: private DateTime _LastLoginDate;
24: private DateTime _LastPasswordChangedDate;
25: private DateTime _LastLockoutDate;
26: private int _FailedPasswordAttemptCount;
27: private DateTime _FailedPasswordAttemptWindowStart;
28: private int _FailedPasswordAnswerAttemptCount;
29: private DateTime _FailedPasswordAnswerAttemptWindowStart;
30: private string _Comment;
31: #endregion
32: #region Public Properties
33: public object ApplicationId
34: { 35: get { return _ApplicationId; } 36: set { _ApplicationId = value; } 37: }
38: public object UserId
39: { 40: get { return _UserId; } 41: set { _UserId = value; } 42: }
43: public string Password
44: { 45: get { return _Password; } 46: set { _Password = value; } 47: }
48: public int PasswordFormat
49: { 50: get { return _PasswordFormat; } 51: set { _PasswordFormat = value; } 52: }
53: public string PasswordSalt
54: { 55: get { return _PasswordSalt; } 56: set { _PasswordSalt = value; } 57: }
58: public string MobilePIN
59: { 60: get { return _MobilePIN; } 61: set { _MobilePIN = value; } 62: }
63: public string Email
64: { 65: get { return _Email; } 66: set { _Email = value; } 67: }
68: public string LoweredEmail
69: { 70: get { return _LoweredEmail; } 71: set { _LoweredEmail = value; } 72: }
73: public string PasswordQuestion
74: { 75: get { return _PasswordQuestion; } 76: set { _PasswordQuestion = value; } 77: }
78: public string PasswordAnswer
79: { 80: get { return _PasswordAnswer; } 81: set { _PasswordAnswer = value; } 82: }
83: public bool IsApproved
84: { 85: get { return _IsApproved; } 86: set { _IsApproved = value; } 87: }
88: public bool IsLockedOut
89: { 90: get { return _IsLockedOut; } 91: set { _IsLockedOut = value; } 92: }
93: public DateTime CreateDate
94: { 95: get { return _CreateDate; } 96: set { _CreateDate = value; } 97: }
98: public DateTime LastLoginDate
99: { 100: get { return _LastLoginDate; } 101: set { _LastLoginDate = value; } 102: }
103: public DateTime LastPasswordChangedDate
104: { 105: get { return _LastPasswordChangedDate; } 106: set { _LastPasswordChangedDate = value; } 107: }
108: public DateTime LastLockoutDate
109: { 110: get { return _LastLockoutDate; } 111: set { _LastLockoutDate = value; } 112: }
113: public int FailedPasswordAttemptCount
114: { 115: get { return _FailedPasswordAttemptCount; } 116: set { _FailedPasswordAttemptCount = value; } 117: }
118: public DateTime FailedPasswordAttemptWindowStart
119: { 120: get { return _FailedPasswordAttemptWindowStart; } 121: set { _FailedPasswordAttemptWindowStart = value; } 122: }
123: public int FailedPasswordAnswerAttemptCount
124: { 125: get { return _FailedPasswordAnswerAttemptCount; } 126: set { _FailedPasswordAnswerAttemptCount = value; } 127: }
128: public DateTime FailedPasswordAnswerAttemptWindowStart
129: { 130: get { return _FailedPasswordAnswerAttemptWindowStart; } 131: set { _FailedPasswordAnswerAttemptWindowStart = value; } 132: }
133: public string Comment
134: { 135: get { return _Comment; } 136: set { _Comment = value; } 137: }
138: #endregion
139: }
140:
这篇文章只是抛砖引玉,你可以创建更强大的功能SP, 或许这是一个思路。
希望对您开发有帮助。
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
TAG: