NFinal代码生成器与其他的代码生成器不太一样,只需要运行模块下的WebComplier.aspx即可生成最终的web层代码。包括数据库的操作,Router类,

调试文件等。附上一段代码与大家分享

usingSystem;usingSystem.Collections.Generic;usingSystem.Web;usingSystem.IO;usingSystem.Reflection;usingSystem.Text;usingSystem.Xml;usingNFinal.Compile;//防止.net2.0下类自动引入Linq命名空间报错.namespaceSystem.Linq{delegatevoidNone();}namespaceNFinal{publicclassFrame{publicstaticstringappRoot;publicstaticstringAssemblyTitle;publicstaticList<NFinal.DB.ConnectionString>ConnectionStrings=newList<NFinal.DB.ConnectionString>();publicFrame(stringappRoot){Frame.appRoot=appRoot;string[]fileNames=Directory.GetFiles(appRoot,"*.csproj");if(fileNames.Length>0){AssemblyTitle=Path.GetFileNameWithoutExtension(fileNames[0]);}else{stringtemp;temp=appRoot.Trim('\\');AssemblyTitle=temp.Substring(temp.LastIndexOf('\\')+1);}}///<summary>///把基于网站根目录的绝对路径改为相对路径///</summary>///<paramname="path"></param>///<returns></returns>publicstaticstringMapPath(stringurl){returnappRoot+url.Trim('/').Replace('/','\\');}publicvoidGetDB(){//获取WebConfig中的连接字符串信息stringconfigFileName=appRoot+"Web.config";if(File.Exists(configFileName)){System.Xml.XmlDocumentdoc=newSystem.Xml.XmlDocument();doc.Load(configFileName);System.Xml.XmlNoderoot=doc.DocumentElement.SelectSingleNode("/configuration");System.Xml.XmlNodeListnodeList=root.SelectNodes("connectionStrings/add[@connectionString]");Frame.ConnectionStrings.Clear();if(nodeList.Count>0){System.Xml.XmlElementele=null;foreach(System.Xml.XmlNodenodeinnodeList){ele=nodeasSystem.Xml.XmlElement;varconnectionString=newNFinal.DB.ConnectionString();connectionString.name=ele.Attributes["name"].Value;connectionString.value=ele.Attributes["connectionString"].Value;connectionString.provider=ele.Attributes["providerName"].Value;if(connectionString.provider.ToLower().IndexOf("mysql")>-1){connectionString.type=NFinal.DB.DBType.MySql;}elseif(connectionString.provider.ToLower().IndexOf("sqlclient")>-1){connectionString.type=NFinal.DB.DBType.SqlServer;}elseif(connectionString.provider.ToLower().IndexOf("sqlite")>-1){connectionString.type=NFinal.DB.DBType.Sqlite;}elseif(connectionString.provider.ToLower().IndexOf("oracle")>-1){connectionString.type=NFinal.DB.DBType.Oracle;}else{connectionString.type=NFinal.DB.DBType.Unknown;}Frame.ConnectionStrings.Add(connectionString);}}}//读取数据库信息NFinal.DB.Coding.DataUtilitydataUtility=null;if(Frame.ConnectionStrings.Count>0){NFinal.DB.ConnectionStringconStr;NFinal.DB.Coding.DB.DbStore.Clear();for(inti=0;i<Frame.ConnectionStrings.Count;i++){conStr=Frame.ConnectionStrings[i];if(conStr.type==NFinal.DB.DBType.MySql){dataUtility=newNFinal.DB.Coding.MySQLDataUtility(conStr.value);dataUtility.GetAllTables(dataUtility.con.Database);NFinal.DB.Coding.DB.DbStore.Add(conStr.name,dataUtility);}elseif(conStr.type==NFinal.DB.DBType.Sqlite){dataUtility=newNFinal.DB.Coding.SQLiteDataUtility(conStr.value);dataUtility.GetAllTables(dataUtility.con.Database);NFinal.DB.Coding.DB.DbStore.Add(conStr.name,dataUtility);}elseif(conStr.type==NFinal.DB.DBType.SqlServer){dataUtility=newNFinal.DB.Coding.SQLDataUtility(conStr.value);dataUtility.GetAllTables(dataUtility.con.Database);NFinal.DB.Coding.DB.DbStore.Add(conStr.name,dataUtility);}elseif(conStr.type==NFinal.DB.DBType.Oracle){#ifNET2#elsedataUtility=newNFinal.DB.Coding.OracleDataUtility(conStr.value);dataUtility.GetAllTables(dataUtility.con.Database);NFinal.DB.Coding.DB.DbStore.Add(conStr.name,dataUtility);#endif}}}}///<summary>///创建主路由///</summary>///<paramname="apps"></param>publicvoidCreateMain(string[]apps){VTemplate.Engine.TemplateDocumentdoc=null;doc=newVTemplate.Engine.TemplateDocument(MapPath("NFinal/Template/Main.tpl"),System.Text.Encoding.UTF8);doc.SetValue("project",NFinal.Frame.AssemblyTitle);doc.SetValue("apps",apps);doc.SetValue("ControllerSuffix","Controller");doc.RenderTo(MapPath("NFinal/Main.cs"),System.Text.Encoding.UTF8);}///<summary>///获取所有的应用模块///</summary>///<returns></returns>publicstring[]GetApps(){stringwebConfigFileName=MapPath("/Web.config");XmlDocumentdoc=newXmlDocument();doc.Load(webConfigFileName);XmlNodeappsNode=doc.DocumentElement.SelectSingleNode("appSettings/add[@key='Apps']");string[]Apps=null;if(appsNode!=null&&appsNode.Attributes.Count>0&&appsNode.Attributes["value"]!=null){Apps=appsNode.Attributes["value"].Value.Split(',');}else{Apps=newstring[]{"App"};}returnApps;}}}