NFinal代码生成器与其他的代码生成器不太一样,只需要运行模块下的WebComplier.aspx即可生成最终的web层代码。包括数据库的操作,Router类,
调试文件等。附上一段代码与大家分享
点击(此处)折叠或打开
- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.IO;
- using System.Reflection;
- using System.Text;
- using System.Xml;
- using NFinal.Compile;
- //防止.net 2.0下类自动引入Linq命名空间报错.
- namespace System.Linq
- {
- delegate void None();
- }
- namespace NFinal
- {
- public class Frame
- {
- public static string appRoot;
- public static string AssemblyTitle;
-
- public static List<NFinal.DB.ConnectionString> ConnectionStrings = new List<NFinal.DB.ConnectionString>();
- public Frame(string appRoot)
- {
- Frame.appRoot = appRoot;
- string[] fileNames = Directory.GetFiles(appRoot, "*.csproj");
- if (fileNames.Length > 0)
- {
- AssemblyTitle = Path.GetFileNameWithoutExtension(fileNames[0]);
- }
- else
- {
- string temp;
- temp = appRoot.Trim('\\');
- AssemblyTitle = temp.Substring(temp.LastIndexOf('\\') + 1);
- }
- }
- /// <summary>
- /// 把基于网站根目录的绝对路径改为相对路径
- /// </summary>
- /// <param name="path"></param>
- /// <returns></returns>
- public static string MapPath(string url)
- {
- return appRoot + url.Trim('/').Replace('/', '\\');
- }
- public void GetDB()
- {
- //获取WebConfig中的连接字符串信息
- string configFileName = appRoot + "Web.config";
- if (File.Exists(configFileName))
- {
- System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
- doc.Load(configFileName);
- System.Xml.XmlNode root = doc.DocumentElement.SelectSingleNode("/configuration");
- System.Xml.XmlNodeList nodeList = root.SelectNodes("connectionStrings/add[@connectionString]");
- Frame.ConnectionStrings.Clear();
- if (nodeList.Count > 0)
- {
- System.Xml.XmlElement ele = null;
- foreach (System.Xml.XmlNode node in nodeList)
- {
- ele = node as System.Xml.XmlElement;
- var connectionString = new NFinal.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;
- }
- else if (connectionString.provider.ToLower().IndexOf("sqlclient") > -1)
- {
- connectionString.type = NFinal.DB.DBType.SqlServer;
- }
- else if (connectionString.provider.ToLower().IndexOf("sqlite") > -1)
- {
- connectionString.type = NFinal.DB.DBType.Sqlite;
- }
- else if (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.DataUtility dataUtility = null;
- if (Frame.ConnectionStrings.Count > 0)
- {
- NFinal.DB.ConnectionString conStr;
- NFinal.DB.Coding.DB.DbStore.Clear();
- for (int i = 0; i < Frame.ConnectionStrings.Count; i++)
- {
- conStr = Frame.ConnectionStrings[i];
- if (conStr.type == NFinal.DB.DBType.MySql)
- {
- dataUtility = new NFinal.DB.Coding.MySQLDataUtility(conStr.value);
- dataUtility.GetAllTables(dataUtility.con.Database);
- NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
- }
- else if (conStr.type == NFinal.DB.DBType.Sqlite)
- {
- dataUtility = new NFinal.DB.Coding.SQLiteDataUtility(conStr.value);
- dataUtility.GetAllTables(dataUtility.con.Database);
- NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
- }
- else if (conStr.type == NFinal.DB.DBType.SqlServer)
- {
- dataUtility = new NFinal.DB.Coding.SQLDataUtility(conStr.value);
- dataUtility.GetAllTables(dataUtility.con.Database);
- NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
- }
- else if (conStr.type == NFinal.DB.DBType.Oracle)
- {
- #if NET2
- #else
- dataUtility = new NFinal.DB.Coding.OracleDataUtility(conStr.value);
- dataUtility.GetAllTables(dataUtility.con.Database);
- NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
- #endif
- }
- }
- }
- }
- /// <summary>
- /// 创建主路由
- /// </summary>
- /// <param name="apps"></param>
- public void CreateMain(string[] apps)
- {
- VTemplate.Engine.TemplateDocument doc = null;
- doc=new VTemplate.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>
- public string[] GetApps()
- {
- string webConfigFileName= MapPath("/Web.config");
- XmlDocument doc = new XmlDocument();
- doc.Load(webConfigFileName);
- XmlNode appsNode = 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 =new string[] {"App"};
- }
- return Apps;
- }
-
- }
- }