petapoco-SQLServer模型增加注释

petapoco 是个基于T4模板的轻量级ORM,好用效率高,具体介绍略了

获取注释基本原理是调用数据库::fn_listextendedproperty函数,获取扩展属性MS_Description

technet 参考资料:sys.fn_listextendedproperty (Transact-SQL)

一、首先是 PetaPoco.Core.ttinclude

  1、106行原始:

public string SequenceName;
public bool Ignore;

  新建Description字段,这个是表的注释

public string SequenceName;
public bool Ignore;
public string Description;

  2、140行原始:

public string SequenceName;
public bool Ignore;

  新建Description字段,这个是列的注释

public string SequenceName;
public bool Ignore;
public string Description;

  3、517行原始:

foreach (var tbl in result)
{
    tbl.Columns=LoadColumns(tbl);

    // Mark the primary key
    string PrimaryKey=GetPK(tbl.Name);
    var pkColumn=tbl.Columns.SingleOrDefault(x=>x.Name.ToLower().Trim()==PrimaryKey.ToLower().Trim());
    if(pkColumn!=null)
    {
        pkColumn.IsPK=true;
    }
}

  修改后,调用函数获取表注释:

foreach (var tbl in result)
{
    using(var cmdDesc=_factory.CreateCommand())
    {
        cmdDesc.Connection = connection;
        cmdDesc.CommandText = TABLE_DESC_SQL;

        DbParameter p = null;

        p = cmdDesc.CreateParameter();
        p.ParameterName = "@schema";
        p.Value = tbl.Schema;
        cmdDesc.Parameters.Add(p);

        p = cmdDesc.CreateParameter();
        p.ParameterName = "@table";
        p.Value = tbl.Name;
        cmdDesc.Parameters.Add(p);

        using (var rdrDesc = cmdDesc.ExecuteReader())
        {
            if (rdrDesc.Read())
                tbl.Description = rdrDesc["value"].ToString();
        }
    }

    tbl.Columns=LoadColumns(tbl);

    // Mark the primary key
    string PrimaryKey=GetPK(tbl.Name);
    var pkColumn=tbl.Columns.SingleOrDefault(x=>x.Name.ToLower().Trim()==PrimaryKey.ToLower().Trim());
    if(pkColumn!=null)
    {
        pkColumn.IsPK=true;
    }
}

  4、572行原始,插入新代码,获取每一列的注释(return result 上面):

foreach (var col in result)
{
    using (var cmdDesc = _factory.CreateCommand())
    {
        cmdDesc.Connection = _connection;
        cmdDesc.CommandText = COLUMN_DESC_SQL;

        DbParameter pDesc = null;

        pDesc = cmdDesc.CreateParameter();
        pDesc.ParameterName = "@schema";
        pDesc.Value = tbl.Schema;
        cmdDesc.Parameters.Add(pDesc);

        pDesc = cmdDesc.CreateParameter();
        pDesc.ParameterName = "@table";
        pDesc.Value = tbl.Name;
        cmdDesc.Parameters.Add(pDesc);

        pDesc = cmdDesc.CreateParameter();
        pDesc.ParameterName = "@column";
        pDesc.Value = col.Name;
        cmdDesc.Parameters.Add(pDesc);
        using (var rdrDesc = cmdDesc.ExecuteReader())
        {
            if (rdrDesc.Read())
                col.Description = rdrDesc["value"].ToString();
        }
    }
}

  5、672、688行原始,插入新的代码,存储调用函数的sql语句:

const string TABLE_DESC_SQL = @"SELECT value FROM ::fn_listextendedproperty(‘MS_Description‘, ‘user‘, @schema, ‘table‘, @table, null, null)";
const string COLUMN_DESC_SQL = @"SELECT value FROM ::fn_listextendedproperty(‘MS_Description‘, ‘user‘, @schema, ‘table‘, @table, ‘column‘, @column)";

至此已经从数据库获取到了注释,下面需要将注释插入到T4模板中!

二、修改PetaPoco.Generator.ttinclude

  1、141行原始:

<#
foreach(Table tbl in from t in tables where !t.Ignore select t)
{
#>
<# if (string.IsNullOrEmpty(tbl.Schema)) { #>
    [TableName("<#=tbl.Name#>")]
<# } else { #>

  添加表的 Description 注释:

<#
foreach(Table tbl in from t in tables where !t.Ignore select t)
{
#>
    /// <summary>
    /// <#=tbl.Description??""#>
    /// </summary>
<# if (string.IsNullOrEmpty(tbl.Schema)) { #>
    [TableName("<#=tbl.Name#>")]
<# } else { #>

  2、167行原始:

<#
foreach(Column col in from c in tbl.Columns where !c.Ignore select c)
{
        // Column bindings
#>
<# if (TrackModifiedColumns) { #>

  添加列的 Description 注释:

<#
foreach(Column col in from c in tbl.Columns where !c.Ignore select c)
{
        // Column bindings
#>
        /// <summary>
        /// <#=col.Description??""#>
        /// </summary>
<# if (TrackModifiedColumns) { #>

这样就改完了,打开database.tt按ctrl+s就能更新获取到的注释了!

另外GetInstance居然不是单例方法,这简直没法忍,果断改掉:

PetaPoco.Generator.ttinclude,38行修改为:

public static <#=RepoName#> GetInstance()
{
    if (_instance!=null)
        return _instance;

    if (Factory!=null)
        return Factory.GetInstance();
    //else
    //    return new <#=RepoName#>();
    return _instance = new <#=RepoName#>();
}
时间: 2024-12-22 12:54:17

petapoco-SQLServer模型增加注释的相关文章

ORACLE中给表、列增加注释以及读取注释

在ORACLE中给表.列增加注释以及读取注释 1.给表填加注释:SQL>comment on table 表名 is '表注释"; 2.给列加注释:SQL>comment on column 表.列 is '列注释'; 3.读取表注释:SQL>select * from user_tab_comments where comments is not null; 4.读取列注释:SQL>select * from user_col_commnents where comme

Django现有模型增加字段

对于Django已经存在的模型中需要增加一个字段,如何实现? 首先在model.py文件中找到对应的模型名称,加入需要增加的字段 然后python manage.py sqlall 数据库名 找到新增加的字段的sql语句,记录下来 再执行python manage.py shell 执行如下命令 from django.db import connection cursor=connection.cursor() cursor.execute('ALTER TABLE tablename ADD

Power Designer逆向工程导入Oracle表,转为模型加注释

1.打开PowerDesigner ——文件——Reverse Engineer——DataBase 2.选择所要连接数据库版本,此处使用的是oracle version 11g. 3.点击红色区域,选择数据源 4.选择modify 5.在此填写你的数据库名称.连接地址.用户名.确定 6.选择你新建立的连接数据库 7.填写需要转换为模型的数据库的用户名和密码 8.确定即可导出为模型 9.如果数据库中对表或字段有注释,那么通过下面的操作,可以让这些注释反映在物理模型上,在查看pdm图时更容易理解.

sqlserver添加表注释、字段注释

--sp_addextendedproperty的使用,8个参数(@name与@value,@level0type与@level0name,@level1type与@level1name,@level2type与@level2name),4对,[email protected]:为列添加扩展信息,@name就等于'Caption'-- 为列添加说明信息,@name等于'MS_Description' [email protected]是要添加的值 [email protected]:指定我们要修

mssql sqlserver 表增加列后,视图不会自动更新相关列的两种解决方法分享

摘要: 今天对物理数据表,进行增加列操作后,程序一直显示无法找到相应列,通过仔细比对发现,视图中无相应列更新,下文将具体的解决方法分享如下: 例: create view vw_test as select * from tableName go ---当我们在表tableName中新增列之,再次查询vw_test ---依然未发现相应列的存在. ----解决方法1:删除原视图,重新创建视图 drop view vw_test go create view vw_test as select *

SqlServer(带中文注释)

using System;using System.Data;using System.Xml;using System.Data.SqlClient;using System.Collections; namespace DotNet.Utilies{ /// <summary> /// SqlServer数据访问帮助类 /// </summary> public sealed class SqlHelper {  #region 私有构造函数和方法   private SqlH

sqlserver 存储过程 增加

亲测可用 CREATE PROCEDURE [dbo].[InsertMessage]( @strTable varchar(50), --表名 @strValues nvarchar(1000), --要插入的数据(用英文逗号分隔),如果是字符串类型,需加单引号 @only_field varchar(20)=NULL, --唯一性字段(列名) @only_value varchar(20)=NULL, --唯一性字段值 @msg nvarchar(50)=NULL --错误消息 ) as B

MVC为模型增加正则表达式

代码如下: [Required(ErrorMessage = "密码不能为空"), RegularExpression(@"^(?=.*\d)(?=.*[a-z]).{6,18}$", ErrorMessage = "必须包含小字母和数字")] [StringLength(100, ErrorMessage = "{0} 至少包含 {2} 个字符.", MinimumLength = 6)] [DataType(DataTyp

Flash Builder 类创建时增加注释

窗口>首选项>Flash Builder>文件模板>ActionScript>ActionScript 类>编辑 ${package_declaration} { ${import_declaration} /** * * @author XXX * @time ${date} * */ ${class_declaration} { ${class_body} } }