zoukankan      html  css  js  c++  java
  • 存储过程生成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

  • 相关阅读:
    [PA2014]Muzeum
    [TJOI2015]概率论
    To Do List
    【洛谷4172】 [WC2006]水管局长(LCT)
    HNOI2019退役记
    hdu 2159 FATE
    USACO 2019 January Contest, Platinum 题解
    luogu4774 [NOI2018]屠龙勇士
    NOI 2019游记
    loj #3145. 「APIO 2019」桥梁
  • 原文地址:https://www.cnblogs.com/wintersun/p/2675348.html
Copyright © 2011-2022 走看看