基于CodeSmith的MVC开发框架构思

数据库:SQL Server 2000

Model,   即实体类,使用CodeSmith根据数据库表自动生成.这个是最常用的.

数据访问层,   最简单的增删改查操作也是使用CodeSmith根据数据库表配合SQLHelper类自动生成.

这层的设计,先贴点未完工的代码给大家参考参考.

1.DalCode.cs

using  System;
using  System.Collections.Generic;
using  System.Text;
using  CodeSmith;
using  SchemaExplorer;
using  CodeSmith.CustomProperties;

namespace  DalCode
{
    
/// <summary>
    
/// CodeSmith的DAL模板的代码类
    
/// </summary>

    public class DalCode
    
{
        
//
        private TableSchema Table;

        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="table"></param>

        public DalCode(SchemaExplorer .TableSchema table)
        
{
            Table 
= table;
        }

        
        
/// <summary>
        
/// 获取Insert方法所需字段名
        
/// </summary>
        
/// <returns></returns>

        public NameValueCollection GetInsertParm()
        
{
            NameValueCollection parm 
= new NameValueCollection();
            
foreach(ColumnSchema cs in Table .Columns)
            
{
                
if(!IsIdentity (cs))
                
{
                    
if(!IsDefault (cs))
                    
{
                        parm.Add(cs.Name,ToSQLType (cs.DataType.ToString()));
                    }

                }

            }

            
            
return parm;
        }


        
/// <summary>
        
/// 获取Delete方法所需字段名
        
/// </summary>
        
/// <returns></returns>

        public NameValueCollection GetDeleteParm()
        
{
            NameValueCollection parm 
= new NameValueCollection();

            
foreach (ColumnSchema cs in Table.Columns)
            
{
                
if (IsIdentity(cs))
                
{
                    parm.Add(cs.Name, cs.DataType.ToString());
                }

            }

            
return parm;
        }


        
/// <summary>
        
/// 获取Update方法所需字段名
        
/// </summary>
        
/// <returns></returns>

        public NameValueCollection GetUpdateParm()
        
{
            NameValueCollection parm 
= new NameValueCollection();

            
foreach (ColumnSchema cs in Table.Columns)
            
{
                
if (!IsIdentity(cs))
                
{
                    parm.Add(cs.Name, cs.DataType.ToString());
                }

            }


            
return parm;
        }


        
/// <summary>
        
/// 获取Select方法所需字段名
        
/// </summary>
        
/// <returns></returns>

        public NameValueCollection GetSelectParm()
        
{
            NameValueCollection parm 
= new NameValueCollection();

            
foreach (ColumnSchema cs in Table.Columns)
            
{
                
if (IsIdentity(cs))
                
{
                    parm.Add(cs.Name, cs.DataType.ToString());
                }

            }


            
return parm;
        }


        
/// <summary>
        
/// 检查字段是否为标识符
        
/// </summary>
        
/// <param name="cs"></param>
        
/// <returns></returns>

        private bool IsIdentity(ColumnSchema cs)
        
{
            
return (bool)cs.ExtendedProperties["CS_IsIdentity"].Value;
        }


        
/// <summary>
        
/// 检查字段是否有默认值
        
/// </summary>
        
/// <param name="cs"></param>
        
/// <returns></returns>

        private bool IsDefault(ColumnSchema cs)
        
{
            
if ((String)cs.ExtendedProperties["CS_Default"].Value == "")
            
{
                
return false;
            }


            
return true;
        }


        
/// <summary>
        
/// 将数据类型转换成SQL数据类型
        
/// </summary>
        
/// <param name="type"></param>
        
/// <returns></returns>

        private string ToSQLType(string type)
        

            
switch (type)
            
{
                
case "AnsiString":
                    
return "SqlDbType.VarChar";
                    
break;
                
default :
                    
return type;
            }

        }

    }

}

 

2. dal.cst     CodeSmith模板文件

 

<%--  
Name:
Author: 
Description: 
--%>
<% @ CodeTemplate Language = " C# "   TargetLanguage = " Text "  ResponseEncoding = " UTF-8 "  Description = " Template description here. "   %>
<% @ Assembly Name = " SchemaExplorer "   %>
<% @ Import Namespace = " SchemaExplorer "   %>
<% @ Assembly Name = " CodeSmith.CustomProperties "   %>
<% @ Import Namespace = " CodeSmith.CustomProperties "   %>
<% @ Assembly Name = " DalCode "   %>
<% @ Import Namespace = " DalCode "   %>

<% @ Property Name = " Table "  Type = " SchemaExplorer.TableSchema "  Category = " Context "  Description = " ?????. "   %>
<% @ Property Name = " NameSpace "  Type = " System.String "  Default = " Company.Product.Module "  Optional = " False "  Category = ""  Description = " ???? "   %>
<% @ Property Name = " Author "  Type = " System.String "  Default = " Author "  Optional = " False "  Category = ""  Description = " ?? "   %>
<% @ Property Name = " Description "  Type = " System.String "  Default = " Description "  Optional = " False "  Category = ""  Description = " Description "   %>  
<% @ Property Name = " ClassName "  Type = " System.String "  Default = " ClassName "  Optional = " False "  Category = ""  Description = " ?? "   %>
<% @ Property Name = " InsertParm "  Type = " CodeSmith.CustomProperties.NameValueCollection "  Default = ""  Optional = " true "  Category = ""  Description = "" %>
<% @ Property Name = " DeleteParm "  Type = " CodeSmith.CustomProperties.NameValueCollection "  Default = ""  Optional = " true "  Category = ""  Description = "" %>
<% @ Property Name = " UpdateParm "  Type = " CodeSmith.CustomProperties.NameValueCollection "  Default = ""  Optional = " true "  Category = ""  Description = "" %>
<% @ Property Name = " SelectParm "  Type = " CodeSmith.CustomProperties.NameValueCollection "  Default = ""  Optional = " true "  Category = ""  Description = "" %>
<% @ Property Name = " ModelType "  Type = " System.String "  Default = " ModelType "  Optional = " False "  Category = ""  Description = " ?? "   %>
<% @ Property Name = " ModelName "  Type = " System.String "  Default = " ModelName "  Optional = " False "  Category = ""  Description = " ?? "   %>
using  System;

namespace   <%=  NameSpace  %>
{
    
/// <summary>
    
/// 作用:<%= Description %>
    
/// 作者:<%= Author %>
    
/// 日期:<%= DateTime.Now.ToString() %>
    
///</summary>

    public class <%= ClassName%>
    
{
          
<%
            DalCode dal 
= new DalCode(Table);
            InsertParm 
= dal.GetInsertParm();    
            
string InsertName = InsertParm[0].Key;
            
string InsertValue = "@" + InsertParm[0].Key;
            
for(int i = 1;i < InsertParm.Keys.Count;i++)
            
{
                InsertName 
+= ",";
                InsertName 
+= InsertParm[i].Key;
                
                InsertValue 
+= ",";
                InsertValue 
+= "@" + InsertParm[i].Key;
            }


            DeleteParm 
= dal .GetDeleteParm ();    
            
            UpdateParm 
= dal.GetUpdateParm ();    
            
string UpdateString = UpdateParm[0].Key + " = @" + UpdateParm[0].Key;
            
for(int i = 1;i < UpdateParm.Keys.Count;i++)
            
{
                UpdateString 
+= ",";
                UpdateString 
+= UpdateParm[i].Key + " = @" + UpdateParm[i].Key;
            }

            
            SelectParm 
= dal.GetSelectParm ();    
        
%>
        
        
private const string SQL_INSERT_TOPIC = "INSERT INTO <%=Table.Name%> (<%=InsertName%>) VALUES(<%=InsertValue%>)";
        
private const string SQL_DELETE_TOPIC = "DELETE FROM <%=Table.Name%> WHERE <%=DeleteParm[0].Key%> = @<%=DeleteParm[0].Key%>";
        
private const string SQL_UPDATE_TOPIC = "UPDATE <%=Table.Name%> SET <%=UpdateString%> WHERE <%=DeleteParm[0].Key%> = @<%=DeleteParm[0].Key%>";
        
private const string SQL_SELECT_TOPIC = "SELECT * FROM <%=Table.Name%> WHERE <%=SelectParm[0].Key%> = @<%=SelectParm[0].Key%>";
        
        
/// <summary>
        
/// INSERT
        
/// </summary>
        
/// <returns></returns>

        public int Insert(<%=ModelType%> <%=ModelName%>)
        
{
            SqlParameter[] insertParm 
= GetInsertParameters();
            
<%
            
for(int i = 0;i < InsertParm.Keys.Count;i++)
            
{
            
%>
            insertParm[
<%=i%>].Value = <%=ModelName%>.<%=InsertParm[i].Key%>;
            
<%
            }

            
%>
            
            
int val = SQLHelper.ExecuteNonQuery(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, SQL_INSERT_TOPIC, insertParm);

            
return val;
        }

        
        
/// <summary>
        
/// 获取SELECT操作的SQL参数
        
/// </summary>
        
/// <returns></returns>

        public static SqlParameter[] GetInsertParameters()
        
{
            SqlParameter[] parms 
= SQLHelper.GetCachedParameters(SQL_INSERT_TOPIC);

            
if (parms == null)
            
{
                parms 
= new SqlParameter[]
                
{
                
<%
                
for(int i = 0;i < InsertParm.Keys.Count;i++)
                
{
                
%>
                    
new SqlParameter("@<%=InsertParm[i].Key%>",<%=InsertParm[i].Value%>),
                   
<%
                }

                
%>
                }
;

                SQLHelper.CacheParameters(SQL_INSERT_TOPIC, parms);
            }


            
return parms;
        }

    }

}

 

设计中的作品,相当乱.

 主要的只是想说个想法.

模板工具:CodeSmith 5.2.2 CodeSmith生成Visual.Studio.2010.MVC4项目工程模板。 默认用户已经安装了CodeSmith 5.2.2代码生成工具。 根据输入参数,自动生成VS2010 + MVC4 + EnterpriseLibrary5.0项目工程。 操作流程: 1:下载net4.0_MVC4_Entlib_V1.0.1.rar文件。 2:解压缩net4.0_MVC4_Entlib_V1.0.1.rar文件到指定路径下。 3:打开codesmisth 5.2.2,导入解压缩后的模板文件夹。 4:在CodeSmith Studio中,Template Explorer下,选择Execute.cst,右键菜单Execute。 5:在CodeSmith的执行窗口中设置参数如下: 1.名称空间 RootNamespace ---------> 根名称空间 ClientNamespace -------> 客户端名称空间 ControllerNamespace ---> 控制器名称空间 CoreNamespace ---------> 核心名称空间 DaoNamespace ----------> 数据操作名称空间 DtoNamespace ----------> 传输实体名称空间 ServiceNamespace ------> 服务业务名称空间 2.数据库(数据库中的表字段要有注释!) Database --------------> 指定一个数据库 ExcludeTables ---------> 指定一个或多个数据表 PrefixLength ----------> 数据表前缀截取长度 TablePrefixes ---------> 3.开发者信息(将作为类注释存在) Author ----------------> 开发者姓名 CompanyName -----------> 公司名称 SystemName ------------> 系统名称 4.杂项(项目工程生成路径) OutputDirectory -------> 项目工程生成路径 版本说明: 版本号:V1.0.0 输入参数自动生成VS2010 + MVC4 + EnterpriseLibrary5.0项目 针对上个版本,整合注入模块到核心模块中。 Web工程直接将全部的JS脚本和页面文件直接拷贝到项目生成目录中。 存在问题:生成的web工程不能被打开,需要手动添加到项目工程中。
CodeSmith生成MVC4项目工程模板V1.0.12.0920 模板工具:CodeSmith 6.5 CodeSmith生成Visual.Studio.2010.MVC4项目工程模板。 默认用户已经安装了CodeSmith 6.5代码生成工具。 根据输入参数,自动生成Visual Studio 2010 + MVC4 + EnterpriseLibrary5.0项目工程。 注意事项: 1:Visual Studio 2010需要安装SP1。并安装MVC4。具体操作请访问微软官方网站。 1:请在建立数据表时,给数据表的说明字段一个简要说明。在*.cs文件生成时会自动写入合理的注视内容。 项目生成最终结构: 以默认参数为例,生成的项目结构如下: onehelper.sln ├─onehelper.Controllers ├─onehelper.Core ├─onehelper.Dao ├─onehelper.Dto ├─onehelper.Service └─onehelper.webClient 模板的当前前端使用yaml css framework 3.3. 操作流程: 1:下载net4.0_MVC4_Entlib_V1.0.1.rar文件。 2:解压缩net4.0_MVC4_Entlib_V1.0.1.rar文件到指定路径下。 3:打开codesmisth 6.5,导入解压缩后的模板文件夹。 4:在CodeSmith Studio中,Template Explorer下,选择Execute.cst,右键菜单Execute。 5:在CodeSmith的执行窗口中设置参数如下: 1.名称空间 RootNamespace ---------> 根名称空间 ClientNamespace -------> 客户端名称空间 ControllerNamespace ---> 控制器名称空间 CoreNamespace ---------> 核心名称空间 DaoNamespace ----------> 数据操作名称空间 DtoNamespace ----------> 传输实体名称空间 ServiceNamespace ------> 服务业务名称空间 2.数据库(数据库中的表字段要有注释!) Database --------------> 指定一个数据库 ExcludeTables ---------> 指定一个或多个数据表 PrefixLength ----------> 数据表前缀截取长度 TablePrefixes ---------> 3.开发者信息(将作为类注释存在) Author ----------------> 开发者姓名 CompanyName -----------> 公司名称 SystemName ------------> 系统名称 4.杂项(项目工程生成路径) OutputDirectory -------> 项目工程生成路径 版本说明: =============================================================== 版本号:V1.0.12.0920 =============================================================== 修改模板生成语法符合codesmisth 6.5的新语法。 针对.net framework4.0进行了修改。 模板的前端: 暂时添加进了yaml css framework 4.0.1.(*此处不需要可以删除*) =============================================================== 版本号:V1.0.2 =============================================================== 请在建立数据表时,给数据表的说明字段一个简要说明。 添加了版本操作详细说明。 存在问题: 生成的web工程不能被打开,需要手动添加到项目工程中。 模板的前端: 暂时添加进了yaml css framework 4.0.1.(*此处不需要可以删除*) =============================================================== 版本号:V1.0.1 =============================================================== 输入参数自动生成VS2010 + MVC4 + EnterpriseLibrary5.0项目 针对上个版本,整合注入模块到核心模块中。 Web工程直接将全部的JS脚本和页面文件直接拷贝到项目生成目录中。 存在问题: 生成的web工程不能被打开,需要手动添加到项目工程中。 模板的前端: 暂时添加进了yaml css framework 4.0.1.(*此处不需要可以删除*) =============================================================== 版本号:V1.0.0 =============================================================== 输入参数自动生成VS2010 + MVC4 + EnterpriseLibrary5.0项目 针对上个版本,整合注入模块到核心模块中。 Web工程直接将全部的JS脚本和页面文件直接拷贝到项目生成目录中。 存在问题:生成的web工程不能被打开,需要手动添加到项目工程中。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值