codesmith生成的代码业务层和借口层无法正常对接,但是中文字段一点问题都没有

问题描述

下面是接口层代码:codesimit模板<%@CodeTemplateInherits="CodeTemplate"Language="C#"TargetLanguage="Text"Description="NetTiersmaintemplate."Debug="True"ResponseEncoding="UTF-8"%><%@AssemblyName="SchemaExplorer"%><%@AssemblyName="System.Design"%><%@AssemblyName="System.DirectoryServices"%><%@AssemblyName="System.Web"%><%@AssemblyName="System.Xml"%><%@ImportNamespace="SchemaExplorer"%><%@ImportNameSpace="System.IO"%><%@ImportNameSpace="System.Text"%><%@ImportNameSpace="System.Text.RegularExpressions"%><%@ImportNameSpace="System.Diagnostics"%><%@ImportNameSpace="System.Xml"%><%@ImportNameSpace="System.Xml.Xsl"%><%@ImportNameSpace="System.Xml.XPath"%><%--1.Datasource--%><%@PropertyName="CurentTable"Type="SchemaExplorer.TableSchema"DeepLoad="True"Optional="False"%>usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingOA.Entity;namespaceOA.IDAL{publicinterfaceIDAL<%=this.CurentTable.Name%>{intInsert(Entity.<%=this.CurentTable.Name%>obj);intUpdate(Entity.<%=this.CurentTable.Name%>obj);intDelete(Entity.<%=this.CurentTable.Name%>obj);List<Entity.<%=this.CurentTable.Name%>>LoadAll();Entity.<%=this.CurentTable.Name%>LoadById(<%=PKArgsForTable()%>);////////////////////////////主表找子表<%foreach(TableKeySchemapkinthis.CurentTable.ForeignKeys){%>List<Entity.<%=this.CurentTable.Name%>>QuerryList<%=pk.Name%>(<%=this.主键在子表中的外键所包含的列的参数列表带数据类型(pk)%>);<%}%>}}<scriptrunat="template">//方法:根据表生成所有列构成的参数列表publicstringAllArgumentsForTable(){stringargs="";foreach(ColumnSchemacolinthis.CurentTable.Columns){args+=string.Format("{0}{1},",col.DataType,col.Name);}returnargs.Substring(0,args.Length-1);}//生成实体类属性赋值根据所有列生成列名=参数名,publicstringAllPropertySetValueForTable(){stringargs="";foreach(ColumnSchemacolinthis.CurentTable.Columns){args+=string.Format("{0}={1},",col.Name,col.Name);}returnargs.Substring(0,args.Length-1);}//方法:生成列的主键列构成的参数列表publicstringPKArgsForTable(){stringargs="";//foreach(ColumnSchemacolinthis.CurentTable.Columns)//{//if(col.IsPrimaryKeyMember)//{//args+=string.Format("{0}{1},",col.Name,col.Name);//}//}foreach(MemberColumnSchemapkColinthis.CurentTable.PrimaryKey.MemberColumns){args+=string.Format("{0}{1},",pkCol.Column.DataType,pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}//方法:生成列的主键列的赋值publicstringPKArgsSetValueForTable(){stringargs="";//foreach(ColumnSchemacolinthis.CurentTable.Columns)//{//if(col.IsPrimaryKeyMember)//{//args+=string.Format("{0}={1},",col.Name,col.Name);//}//}foreach(MemberColumnSchemapkColinthis.CurentTable.PrimaryKey.MemberColumns){args+=string.Format("{0}={1},",pkCol.Column.Name,pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}//方法:生成主键列名字publicstringPKArgsWithoutDataTypeForTable(){stringargs="";//foreach(ColumnSchemacolinthis.CurentTable.Columns)//{//if(col.IsPrimaryKeyMember)//{//args+=string.Format("{0}={1},",col.Name,col.Name);//}//}foreach(MemberColumnSchemapkColinthis.CurentTable.PrimaryKey.MemberColumns){args+=string.Format("{0},",pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}publicstringPKArgsWithoutDataTypeForTable(TableSchematable){stringargs="";//foreach(ColumnSchemacolinthis.CurentTable.Columns)//{//if(col.IsPrimaryKeyMember)//{//args+=string.Format("{0}={1},",col.Name,col.Name);//}//}foreach(MemberColumnSchemapkColintable.PrimaryKey.MemberColumns){args+=string.Format("{0},",pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}publicstringGetFKArgs(TableKeySchemafk){stringargs="";foreach(MemberColumnSchemafkcloinfk.ForeignKeyMemberColumns){args+=string.Format("{0}{1},",fkclo.DataType,fkclo.Name);}returnargs.Substring(0,args.Length-1);}publicstring主键在子表中的外键所包含的列的参数列表带数据类型(TableKeySchemafk){stringargs="";foreach(MemberColumnSchemafkcloinfk.ForeignKeyMemberColumns){args+=string.Format("{0}{1},",fkclo.DataType,fkclo.Name);}returnargs.Substring(0,args.Length-1);}publicstring主键在子表中的外键的参数列表(TableKeySchemafk){stringargs="";foreach(MemberColumnSchemafkcloinfk.ForeignKeyMemberColumns){args+=string.Format("{0},",fkclo.Name);}returnargs.Substring(0,args.Length-1);}</script>

解决方案

解决方案二:
<%@CodeTemplateInherits="CodeTemplate"Language="C#"TargetLanguage="Text"Description="NetTiersmaintemplate."Debug="True"ResponseEncoding="UTF-8"%><%@AssemblyName="SchemaExplorer"%><%@AssemblyName="System.Design"%><%@AssemblyName="System.DirectoryServices"%><%@AssemblyName="System.Web"%><%@AssemblyName="System.Xml"%><%@ImportNamespace="SchemaExplorer"%><%@ImportNameSpace="System.IO"%><%@ImportNameSpace="System.Text"%><%@ImportNameSpace="System.Text.RegularExpressions"%><%@ImportNameSpace="System.Diagnostics"%><%@ImportNameSpace="System.Xml"%><%@ImportNameSpace="System.Xml.Xsl"%><%@ImportNameSpace="System.Xml.XPath"%><%--1.Datasource--%><%@PropertyName="CurrentTable"Type="SchemaExplorer.TableSchema"DeepLoad="True"Optional="False"%>usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceOA.BLL{publicclass<%=CurrentTable.Name%>{privateDALFactory.DALFactorydataFactory=DataProvider.DefaultProvider;#region增publicint添加(Entity.<%=CurrentTable.Name%>obj){//通过工厂获得当前提供程序//用反射,通过web.config获得当前提供程序的名,再实例化returndataFactory.DAL<%=CurrentTable.Name%>Provider.Insert(obj);}//publicint添加(string机构名称,string简称,int排序)//{//returnthis.添加(Guid.NewGuid(),机构名称,简称,排序);//}//标准做法//方法:根据表,生成所有列构成的参数列表publicint添加(<%=this.AllArgumentsForTable()%>){returnthis.添加(newOA.Entity.<%=CurrentTable.Name%>(){<%=this.AllPropertySetValueForTable()%>});//生成实例类属性赋值根据所有列,生成列名=参数名,}#endregion#region改publicint修改(Entity.<%=CurrentTable.Name%>obj){returndataFactory.DAL<%=CurrentTable.Name%>Provider.Update(obj);}//方法:根据表,生成所有列构成的参数列表publicint修改(<%=this.AllArgumentsForTable()%>){returnthis.修改(newOA.Entity.<%=CurrentTable.Name%>(){<%=this.AllPropertySetValueForTable()%>});//生成实例类属性赋值}#endregion#region删publicint删除(Entity.<%=CurrentTable.Name%>obj){returndataFactory.DAL<%=CurrentTable.Name%>Provider.Delete(obj);}//方法:生成列的主键列构成的参数列表publicint删除(<%=this.PKArgsForTable()%>){returnthis.删除(newOA.Entity.<%=CurrentTable.Name%>(){<%=this.PKPropertySetValueForTable()%>});//方法:生成主键列的赋值}#endregion#region查//方法:生成列的主键列构成的参数列表publicEntity.<%=CurrentTable.Name%>取<%=CurrentTable.Name%>ById(<%=this.PKArgsForTable()%>){returndataFactory.DAL<%=CurrentTable.Name%>Provider.LoadById(<%=this.PKArgsWithoutDataTypeForTable()%>);}publicList<Entity.<%=CurrentTable.Name%>>取所有<%=CurrentTable.Name%>(){returndataFactory.DAL<%=CurrentTable.Name%>Provider.LoadAll();}//LoadXXXXChildEntitiesByParrentID()//publicList<Entity.部门>取属于机构的部门(Guid机构ID)//{//returndataFactory.DAL机构Provider.Load部门By机构(机构ID);//}#endregion#region当前表如果有外键,找外键所在的主表<%foreach(TableKeySchemafkinthis.CurrentTable.ForeignKeys){%>publicEntity.<%=fk.PrimaryKeyTable.Name%>FindParrentBy<%=fk.Name%>FK(<%=this.GetFKArgs(fk)%>){returnthis.dataFactory.DAL<%=fk.PrimaryKeyTable.Name%>Provider.LoadById(<%=PKArgsWithoutDataTypeForTable(fk.PrimaryKeyTable)%>);}<%}%>#endregion#region主表找从表<%foreach(TableKeySchemapkinthis.CurrentTable.PrimaryKeys){%>//从当前表,找子表的ListpublicList<Entity.<%=pk.ForeignKeyTable.Name%>>Get<%=pk.ForeignKeyTable.Name%>ListBy<%=pk.Name%>(<%=主键在子表中的外键所包含的列的参数列表带数据类型(pk)%>){returnthis.dataFactory.DAL<%=pk.ForeignKeyTable.Name%>Provider.QurryList<%=pk.Name%>(<%=this.主键在子表中的外键所包含的列的参数列表(pk)%>);}<%}%>#endregion
解决方案三:
//////////////////测试使用<%foreach(TableKeySchemafkinthis.CurrentTable.ForeignKeys){//Response.WriteLine("FK:{0}",fk.Name);//fk:当前这个表,引用别的表的主键}foreach(TableKeySchemapkinthis.CurrentTable.PrimaryKeys){Debug.WriteLine(pk.GetType().ToString());//Response.WriteLine("PrimaryKey:{0}",pk.Name);//当前这个表的主键,在其他表中出现的外键引用}//Response.WriteLine(this.CurrentTable.PrimaryKey.Name);//当前表的唯一主键%>}}<scriptrunat="template">//方法:根据表,生成所有列构成的参数列表publicstringAllArgumentsForTable(){stringargs="";foreach(ColumnSchemacolinthis.CurrentTable.Columns){args+=string.Format("{0}{1},",col.DataType,col.Name);}returnargs.Substring(0,args.Length-1);}//生成实例类属性赋值根据所有列,生成列名=参数名,//方法:根据表,生成所有列构成的参数列表publicstringAllPropertySetValueForTable(){stringargs="";foreach(ColumnSchemacolinthis.CurrentTable.Columns){args+=string.Format("{0}={1},",col.Name,col.Name);}returnargs.Substring(0,args.Length-1);}//方法:生成列的主键列构成的参数列表publicstringPKArgsForTable(){stringargs="";//foreach(ColumnSchemacolinthis.CurrentTable.Columns)//{//if(col.IsPrimaryKeyMember)//{//args+=string.Format("{0}={1},",col.Name,col.Name);//}//}foreach(MemberColumnSchemapkColinthis.CurrentTable.PrimaryKey.MemberColumns){args+=string.Format("{0}{1},",pkCol.Column.DataType,pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}//方法:生成主键列的赋值publicstringPKPropertySetValueForTable(){stringargs="";foreach(MemberColumnSchemapkColinthis.CurrentTable.PrimaryKey.MemberColumns){args+=string.Format("{0}={1},",pkCol.Column.Name,pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}//方法:生成主键列参数publicstringPKArgsWithoutDataTypeForTable(){stringargs="";foreach(MemberColumnSchemapkColinthis.CurrentTable.PrimaryKey.MemberColumns){args+=string.Format("{0},",pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}publicstringPKArgsWithoutDataTypeForTable(TableSchematable){stringargs="";foreach(MemberColumnSchemapkColintable.PrimaryKey.MemberColumns){args+=string.Format("{0},",pkCol.Column.Name);}returnargs.Substring(0,args.Length-1);}//按某个FK,取它的列构成的参数列表publicstringGetFKArgs(TableKeySchemafk){stringargs="";foreach(MemberColumnSchemafkColinfk.ForeignKeyMemberColumns){args+=string.Format("{0}{1},",fkCol.DataType,fkCol.Name);}returnargs.Substring(0,args.Length-1);}publicstring主键在子表中的外键所包含的列的参数列表(TableKeySchemakey){stringargs="";foreach(MemberColumnSchemaColinkey.ForeignKeyMemberColumns){args+=string.Format("{0},",Col.Column.Name);}returnargs.Substring(0,args.Length-1);}publicstring主键在子表中的外键所包含的列的参数列表带数据类型(TableKeySchemakey){stringargs="";foreach(MemberColumnSchemaColinkey.ForeignKeyMemberColumns){args+=string.Format("{1}{0},",Col.Column.Name,Col.DataType);}returnargs.Substring(0,args.Length-1);}</script>报错:#region主表找从表代码生成器生成的代码:publicList<Entity.DirectoryInfo>GetDirectoryInfoListByFK_DIRECTOR_REFERENCE_FILESYST(GuidDirectoryInfoID){returnthis.dataFactory.DALDirectoryInfoProvider.QuerryListFK_DirectoryInfo_REFERENCE_FileSystemInfo(DirectoryInfoID);}publicList<Entity.FileInfo>GetFileInfoListByFK_FILEINFO_REFERENCE_FILESYST(GuidFileInfoID){returnthis.dataFactory.DALFileInfoProvider.QuerryListFK_FileInfo_REFERENCE_FileSystemInfo(FileInfoID);}#endregion下面是被调用的接口层相应代码:////////////////////////////主表找子表List<Entity.DirectoryInfo>QuerryListFK_DIRECTOR_REFERENCE_DIRECTOR(GuidParentDirectoryInfoID);List<Entity.DirectoryInfo>QuerryListFK_DIRECTOR_REFERENCE_FILESYST(GuidDirectoryInfoID);下面是vs报错的显示:
解决方案四:
本人的看法是代码没有错,因为我的数据库字段绝大多数表是中文字段,业务层和接口层生成的代码能够无缝对接,但是只有文件那块的表我我用的FileInfo和FileSystemInfo继承DirectoryInfo.这里才用英文字段。

时间: 2024-09-20 09:36:30

codesmith生成的代码业务层和借口层无法正常对接,但是中文字段一点问题都没有的相关文章

CodeSmith生成DLL层显示错误,谁能帮忙解决一下

问题描述 System.ArgumentOutOfRangeException:Argumentcannotbenegative.参数名:index实际值是-1.在SchemaExplorer.ColumnSchemaCollection.a(Int32A_0)在SchemaExplorer.ColumnSchemaCollection.get_Item(Int32index)在SchemaExplorer.ColumnSchemaCollection.c.a(Int32A_0)在_CodeSm

CodeSmith系列(二)——使用CodeSmith生成ASP.NET后台代码

因为表单的后台代码都差不多,所以采用了CodeSmith生成.由于表单的控制是基于XML的,所以可以根据XML自定义生成.由于没时间,就不多写了,具体模板代码见最后. 在这里,先选择变量.如下: XMl文件内容如下: <?xml version="1.0" encoding="utf-8" ?> <FieldConfig> <GlobalDefaultConfig> <Description>付款确认单</Des

用codesmith生成实体类问题?

问题描述 用codesmith生成实体类后,然后生成相应的其他两层代码,在使用的过程中发现,需要在添加一个字段,如果把代码在生成一遍后进行覆盖的话,那自己之后手动写的代码就会被覆盖,这样显然是行不通的,请问谁有更好的方法?

.net能自动生成后台代码吗?

问题描述 如题!.NET能根据数据库中的数据表自动生成操作代码吗?比如增删改操作??怎样生成哪???多谢!!! 解决方案 解决方案二:是架构里面的...解决方案三:有这种需要??解决方案四:namespaceSystem.Web.Compilation{//Summary://Definesasetofpropertiesandmethodsforgeneratingsourcecodewithin//theASP.NETbuildenvironment.Thisclassisabstract.

通过ES2007平台开发生成的代码是JAVA的吗?

问题描述 通过ES2007平台开发生成的代码是JAVA的吗? 解决方案 开发工具不是代码生成工具,而是图形化设计开发工具,简单来说,平台有一个强大的解释引擎,在设计时设计的业务逻辑在运行时被引擎解释并运行.而当图形化不能满足的时候,用户就需要自行写代码了,这个跟用VS和DELPHI之类的写代码是一样的.只不过平台引擎有大量的标准API可被调用,写功能是很简单的,只要调用函数就可以了.当然这些工具在真正开发的时候用的也很少,平台工具大部分工作都能完成.

CodeSmith系列(一)——使用CodeSmith生成存储过程

在工作中经常会碰到重复编程的情况.这些代码要么是完全重复的,要么是有规律的.但是手写起来都需要耗费时间,而且很容易出错.最近就碰到了几件,于是想到了利用CodeSmith来写模版生成,发现是一件很不错的事. 比如有这么一个需求,有很多表,每张表都有一张日志表,需要有这么个存储过程来更新日志表的数据.定义模版如下: <%-- Author: LWQ Description: 生成LOG表的存储过程 --%> <%@ CodeTemplate Language="C#"

CodeSmith系列(三)——使用CodeSmith生成ASP.NET页面

  仍然使用之前的XML文件,然后设置生成参数如下: 生成调整后的页面如下: 生成的代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ConfirmationForPayment.ascx.cs" Inherits="NBShop.UserControls.Form.ConfirmationForPayment" EnableViewSt

jax_ws 客户端远程调用方法时必须使用wsimport命令生成接口代码

问题描述 jax_ws 客户端远程调用方法时必须使用wsimport命令生成接口代码 jax_ws 客户端远程调用方法时,不生成服务端的代码如何实现?

自动生成代码-自动生成spring代码工具

问题描述 自动生成spring代码工具 有没有自动生成SPRING的代码工具? 能够自动生成pojo,dao,control,service, 我看到网上有个spring roo工具,但是感觉不好用. 解决方案 是自动生成Dao,Action,Service,Controller之类的吧? 解决方案二: 这种工具不知道有没有开源的,不过很多公司可能都有自己的一套. 我们公司也有,不过只有给你讲一下大概的思路. 该工具一般由以下几部分组成:读取数据库的数据表结构的功能,模板引擎(如:freemar