收藏本站 
广告服务 
网站地图 
>> 我们从网络和杂志上收集了近100000余篇各类电脑技术、网络技术、软件技术等方面的文章教程,我们的收录原则:不是精华拒不收录!
先飞电脑技术网技术文章
网络编程 | 网站建设 | 网络技术 | 设计教程 | 软件教学 | 程序开发 | 数据库开发 | 教育认证 | 硬件维护 | 媒体动画 | 机械电子 |
让SubSonic生成实体类自动加注释
[ 作者:佚名    转贴自:网络转载    阅读次数:69    更新时间:2007-8-17 11:22:00   录入:刘光勇 ]         
    SubSonic自动根据表生成的实体类中没有注释,如果表的字段很多或是字段名句不是很规范的话,那么使用起来就很不方便了。本文针对SubSonic 2.0.3版本做修改,让生成的实体类自动根据字段的说明生成注释。

首先需要给TableSchema.TableColumn类添加一个名为Description的字段:
打开SubSonic\Sql Tools\TableSchema.cs文件,找到TableSchema类中的TableColumn类,然后添加:
private string description;
public string Description
{
get { return description; }
set { description = value; }
} 打开SubSonic\Constants.cs文件,找到SqlSchemaVariable这个类,给它添加一个成员:
public const string COLUMN_DESCRIPTION = "ColumnDescription";
SubSonic\DataProviders\SqlDataProvider.cs
将TABLE_COLUMN_SQL_ALL的SQL语句改为:
private const string TABLE_COLUMN_SQL_ALL =@" SELECT
columns.TABLE_CATALOG AS [Database],
columns.TABLE_SCHEMA AS Owner,
columns.TABLE_NAME AS TableName,
columns.COLUMN_NAME AS ColumnName,
columns.ORDINAL_POSITION AS OrdinalPosition,
columns.COLUMN_DEFAULT AS DefaultSetting,
columns.IS_NULLABLE AS IsNullable, columns.DATA_TYPE AS DataType,
columns.CHARACTER_MAXIMUM_LENGTH AS MaxLength,
columns.DATETIME_PRECISION AS DatePrecision,
COLUMNPROPERTY(object_id(columns.TABLE_SCHEMA + '.' + TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') AS IsIdentity,
COLUMNPROPERTY(object_id(columns.TABLE_SCHEMA + '.' + TABLE_NAME), columns.COLUMN_NAME, 'IsComputed') as IsComputed,
properties.value as ColumnDescription
FROM INFORMATION_SCHEMA.COLUMNS columns
left join sys.extended_properties properties
ON object_Id(columns.Table_Name) = properties.major_id
AND columns.Ordinal_position = properties.minor_id
ORDER BY OrdinalPosition ASc";
找到函数:public override TableSchema.Table GetTableSchema(string tableName, TableType tableType),
在column.IsReadOnly = (nativeDataType == "timestamp"    isComputed);这行后面添加: if (drColumns[i][SqlSchemaVariable.COLUMN_DESCRIPTION] != DBNull.Value)
{
column.Description = (string)drColumns[i][SqlSchemaVariable.COLUMN_DESCRIPTION];
}

修改生成代码的模板
打开\SubSonic\CodeGeneration\Templates\CS_ClassTemplate.aspx
找到public <%=nullableVarType%><%=propName%>,添加如下注释模板:
///
/// <%=col.Description%>
///

[XmlAttribute("<%=propName%>")]
public <%=nullableVarType%><%=propName%>
找到public struct Columns,改为:

public struct Columns
{
<% foreach (TableSchema.TableColumn col in cols) {%>
///
/// <%=col.Description%>
///

public static string <%=col.PropertyName%>= @"<%=col.ColumnName%>";
<%}%>
}

编译解决方案,然后再用sonic.exe生成代码即可。效果如下:

表定义:



生成的实体类代码:



///
/// This is an ActiveRecord class which wraps the Users table.
///

[Serializable]
public partial class User : ActiveRecord
{
//
///
/// 自动编号
///

[XmlAttribute("Id")]
public int Id
{
get { return GetColumnValue("ID"); }

set { SetColumnValue("ID", value); }

}

///
/// 用户名
///

[XmlAttribute("UserName")]
public string UserName
{
get { return GetColumnValue("UserName"); }

set { SetColumnValue("UserName", value); }

}

///
/// 登录密码
///

[XmlAttribute("Password")]
public string Password
{
get { return GetColumnValue("Password"); }

set { SetColumnValue("Password", value); }

}

//
public struct Columns
{
///
/// 自动编号
///

public static string Id = @"ID";
///
/// 用户名
///

public static string UserName = @"UserName";
///
/// 登录密码
///

public static string Password = @"Password";
}

}


补充一点:如果有中文的注释的话,可能会变成乱码,这时还需要将\SubSonic\Sugar\File.cs中的CreateToFile(string absolutePath, string fileText)函数修改一下:

public static void CreateToFile(string absolutePath, string fileText)
{
File.WriteAllText(absolutePath, fileText, Encoding.Default);
}


OK了
【加入到收藏夹】告诉好友】【打印此文】【关闭窗口
  版权声明:本站提供的“让SubSonic生成实体类自动加注释”版权归文章所有者,转载请注明出处!
 ·上一篇文章:.Net环境下基于Ajax的MVC方案      ·下一篇文章:没有了
相关文章
·让Safari在Windows下正常显示中文[83]
·让SQL Server为工作负载高峰提前做好准备[32]
·让SATA和IDE硬盘和平共处[2]
·让S90兼容VIA的七招妙式[100]
·[SQL]不要让SQLServer帮你自动转换SQL命令中的数据类型[12]
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 招聘信息 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号