问题描述
下面是接口层代码: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.这里才用英文字段。