在asp.net 和 mvc 中经常要用到数据库,对于数据库的CRUD操作总是很频繁,其中最繁琐的事情就是要手写 数据库字段的列名,将其变成相关的类的属性,通常就是业务领域中的模型,要手写这些断气库表中的属性,工作极其乏味,也没有多大的意义,要是能有个工具,自动自成就好多了,自己就不用去写这些乏味无聊的东西了, 幸好,我们的前辈们已经开发出了许多优秀的代码生成器,今天我向大家介绍 一款优秀的代码生成器,想必我们其中的不少都在开发中使用它,它就是 CodeSmith Genrator
1.用 CodeSmith Generator 代码生成器,生成数据库中的所有的属性
具体代码如下:
<%--
Name: Database Table Properties
Author: Paul Welter
Description: Create a list of properties from a database table
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<% foreach (ColumnSchema column in this.SourceTable.Columns) { %>
private <%= CSharpAlias[column.SystemType.FullName] %> _<%= StringUtil.ToCamelCase(column.Name) %>;
public <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToPascalCase(column.Name) %>
{
get { return _<%= StringUtil.ToCamelCase(column.Name) %>; }
set { _<%= StringUtil.ToCamelCase(column.Name) %> = value; }
}
<% } %>
生成的效果如下:
private int _cartID;
public int CartID
{
get { return _cartID; }
set { _cartID = value; }
}
private int _uniqueID;
public int UniqueID
{
get { return _uniqueID; }
set { _uniqueID = value; }
}
private string _itemId;
public string ItemId
{
get { return _itemId; }
set { _itemId = value; }
}
如果只想生成 只有 get, set 的干净的访问器,可以使用下面的模板
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<% foreach (ColumnSchema column in this.SourceTable.Columns) { %>
public <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToPascalCase(column.Name) %> { get; set; }
<% } %>
生成的效果如下:
public int CartID { get; set; }
public int UniqueID { get; set; }
public string ItemId { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public string Price { get; set; }
2 用 CodeSmith Generator 代码生成器,生成数据库中的所有的列名,以及列的长度,类型,和对应的CTS 中的类型
完整的模板代码如下:
<%--
Name: 遍历数据库中所有的表中的列名,数据类型,以及 CTS数据类型
Author: springfileld
Description:
DateTime: 2014-07-31
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
<%@ Property Name="DataBases" Type="SchemaExplorer.DatabaseSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
数据库名: <%=DataBases.Name %>
创建日期: <%=DataBases.DateCreated %>
<% foreach( var tb in DataBases.Tables){ %>
表名: <%=tb.Name %>
<% foreach( var cl in tb.Columns){ %>
列名: <%= cl.Name %>
数据类型: <%= cl.NativeType %>
数据长度: <%= cl.Size %>
CTS数据类型: <%=cl.DataType %>
描述: <%=cl.Description %>
<%} %>
<%} %>
生成的效果如下:
数据库名: PetShop
创建日期: 0001/1/1 0:00:00
表名: Account
列名: AccountID
数据类型: Int
数据长度: 4
CTS数据类型: Int32
描述:
列名: UniqueID
数据类型: Int
数据长度: 4
CTS数据类型: Int32
描述:
列名: Email
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: FirstName
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: LastName
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: Address1
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: Address2
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: City
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: State
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: Zip
数据类型: VarChar
数据长度: 20
CTS数据类型: AnsiString
描述:
列名: Country
数据类型: VarChar
数据长度: 20
CTS数据类型: AnsiString
描述:
列名: Phone
数据类型: VarChar
数据长度: 20
CTS数据类型: AnsiString
描述:
表名: Cart
列名: CartID
数据类型: Int
数据长度: 4
CTS数据类型: Int32
描述:
列名: UniqueID
数据类型: Int
数据长度: 4
CTS数据类型: Int32
描述:
列名: ItemId
数据类型: VarChar
数据长度: 10
CTS数据类型: AnsiString
描述:
列名: Name
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: Type
数据类型: VarChar
数据长度: 80
CTS数据类型: AnsiString
描述:
列名: Price
数据类型: Decimal
数据长度: 14
CTS数据类型: String
描述:
列名: CategoryId
数据类型: VarChar
数据长度: 10
CTS数据类型: AnsiString
描述:
列名: ProductId
数据类型: VarChar
数据长度: 10
CTS数据类型: AnsiString
描述:
列名: IsShoppingCart
数据类型: Bit
数据长度: 1
CTS数据类型: Boolean
描述:
列名: Quantity
数据类型: Int
数据长度: 4
CTS数据类型: Int32
描述:
3. 生成 PetaPoco ORM 框架下的 对象属性,模板代码如下:
<%--
Name: 遍历数据库中所有的表中的列名,并映射成 PetaPoco类的 orm
Author: springfileld
Description:
DateTime: 2014-07-31
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
<%@ Property Name="SourceData" Type="SchemaExplorer.DatabaseSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Assembly Name="xftwl.Infrastructure" %>
<%@ Import Namespace="xftwl.Infrastructure" %>
<%foreach( var tb in SourceData.Tables){ %>
[TableName("<%=tb.Name %>")]
<%foreach (var pk in tb.PrimaryKey.MemberColumns){ %>
[PrimaryKey("<%= pk.Name%>")]
<%} %>
[ExplicitColumns]
public partial class <%=StringUtil.ToPascalCase(tb.Name) %> ()
{
<%foreach( var cl in tb.Columns) {%>
[Column]
public <%=CSharpAlias[cl.SystemType.FullName]%> <%=StringUtil.ToPascalCase(cl.Name) %> { get; set; }
<%} %>
}
<%} %>
生成的效果:
[TableName("Account")]
[PrimaryKey("AccountID")]
[ExplicitColumns]
public partial class Account ()
{
[Column]
public int AccountID { get; set; }
[Column]
public int UniqueID { get; set; }
[Column]
public string Email { get; set; }
[Column]
public string FirstName { get; set; }
[Column]
public string LastName { get; set; }
[Column]
public string Address1 { get; set; }
[Column]
public string Address2 { get; set; }
[Column]
public string City { get; set; }
[Column]
public string State { get; set; }
[Column]
public string Zip { get; set; }
[Column]
public string Country { get; set; }
[Column]
public string Phone { get; set; }
}
[TableName("Cart")]
[PrimaryKey("CartID")]
[ExplicitColumns]
public partial class Cart ()
{
[Column]
public int CartID { get; set; }
[Column]
public int UniqueID { get; set; }
[Column]
public string ItemId { get; set; }
[Column]
public string Name { get; set; }
[Column]
public string Type { get; set; }
[Column]
public string Price { get; set; }
[Column]
public string CategoryId { get; set; }
[Column]
public string ProductId { get; set; }
[Column]
public bool IsShoppingCart { get; set; }
[Column]
public int Quantity { get; set; }
}
好了,这些是自己的实际的开发项目中,为了提高工作效率而编写的模板,如果大家还有什么更好的,欢迎分享。