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 > )
{
AssemblyTitle = Path.GetFileNameWithoutExtension(fileNames[]);
}
else
{
string temp;
temp = appRoot.Trim('\\');
AssemblyTitle = temp.Substring(temp.LastIndexOf('\\') + );
}
} /// <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 > )
{
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") > -)
{
connectionString.type = NFinal.DB.DBType.MySql;
}
else if (connectionString.provider.ToLower().IndexOf("sqlclient") > -)
{
connectionString.type = NFinal.DB.DBType.SqlServer;
}
else if (connectionString.provider.ToLower().IndexOf("sqlite") > -)
{
connectionString.type = NFinal.DB.DBType.Sqlite;
}
else if (connectionString.provider.ToLower().IndexOf("oracle") > -)
{
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 > )
{
NFinal.DB.ConnectionString conStr;
NFinal.DB.Coding.DB.DbStore.Clear();
for (int i = ; 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 > && appsNode.Attributes["value"] != null)
{
Apps = appsNode.Attributes["value"].Value.Split(',');
}
else
{
Apps =new string[] {"App"};
}
return Apps;
} } }

NFinal学习笔记 03—代码生成器的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试

    机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...

  2. OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓

    本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...

  3. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  4. C++ GUI Qt4学习笔记03

    C++ GUI Qt4学习笔记03   qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QM ...

  5. SaToken学习笔记-03

    SaToken学习笔记-03 如果排版有问题,请点击:传送门 核心思想 所谓权限验证,验证的核心就是一个账号是否拥有一个权限码 有,就让你通过.没有?那么禁止访问! 再往底了说,就是每个账号都会拥有一 ...

  6. Redis:学习笔记-03

    Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...

  7. OGG学习笔记03

    OGG学习笔记03-单向复制简单故障处理 环境:参考:OGG学习笔记02-单向复制配置实例实验目的:了解OGG简单故障的基本处理思路. 1. 故障现象故障现象:启动OGG源端的extract进程,da ...

  8. xml基础学习笔记03

    继续上篇xml学习笔记,坚持.坚持.再坚持啊.... 本篇主要记录: 35.XML节点的删除与修改 36集.用XML制作RSS订阅源 <?php /* 笔记: 35.XML节点的删除与修改 使用 ...

  9. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

随机推荐

  1. (转)sql中 in 、not in 、exists、not exists 用法和差别

    exists (sql 返回结果集为真)  not exists (sql 不返回结果集为真)  如下:  表A  ID NAME  1    A1  2    A2  3  A3 表B  ID AI ...

  2. Geodatabase - 打开要素类

    string dbPath = @"G:\doc\gis\1.400\data\pdb.mdb"; ESRI.ArcGIS.Geodatabase.IWorkspaceFactor ...

  3. silverlight 双坐标轴

    public void CreateLine(Grid oGrid, string sTitle, string sTableName, bool ifGetSig, string sYUint, s ...

  4. 最小生成树prim算法———模板

    codevs.cn 最优布线问题 #include<cstdio>#include<cstring> bool u[101]; int g[101][101],minn[101 ...

  5. Linux知识扫盲

    1.发现linux中好多软件以d结尾,d代表什么? d 代表 deamon 守护进程守护进程是运行在Linux服务器后台的一种服务程序.现在比较常用 是 service 这个词.它周期性地执行某种任务 ...

  6. Spring AOP之异常转换

    Spring-AOP之异常转换 引子 最近项目遇到了一个问题,就是说业务层向展现层需要转换成统一个异常类,并抛出异常,但是由于业务层的异常类过多,所以导致业务异常转换代码充斥着异常转换的代码,本着程序 ...

  7. JavaScript 作用域和闭包

    作用域的嵌套将形成作用域链,函数的嵌套将形成闭包.闭包与作用域链是 JavaScript 区别于其它语言的重要特性之一. 作用域 JavaScript 中有两种作用域:函数作用域和全局作用域. 在一个 ...

  8. php环境安装及搭建

    最近由于项目需要 转战 PHP .  在做了差不多两年java后 说实话看php代码还是有些难受的. 毕竟不习惯.废话不说 先说一下 PHP环境的部署等等,也就是最近几天学习的心得吧.方便以后参考. ...

  9. windows下使用php重命名目录下的文件

    rename函数一直报错,最后发现是windows下文件名的编码问题,如果项目文件是utf-8的话,一定要经过一步转码 $dir = $path . '/../resource/logo'; $han ...

  10. [Codeforces Round #186 (Div. 2)] B. Ilya and Queries

    B. Ilya and Queries time limit per test 2 seconds memory limit per test 256 megabytes input standard ...