MOON.NET 简易DEMO发布
最近,看到园子里发布了一个新的.net框架--MOON.NET。本着好奇和学习的心态,照着作者的博文,下载DLL、写示例代码。在这个过程中出现了很多问题,比如:
1、程序中出现异常,面对陌生的异常提示和编译后的DLL一头雾水。
2、看着VS中点出来的一大堆方法和陌生的参数不知所措。
带着这些问题,开始了与作者的交流。在交流的过程中,才知道作者是一个人独立在做维护工作,虽然很多地方还不完善,但个人感觉该框架容易上手、操作简便且性能较高。当然,现在市面上的框架数不胜数,各有长短,小弟不才,这个留给前辈级的人物去讨论。
对于MOON.NET框架的相关介绍,这里就不多说了,大家可以去看作者原文:
Moon.Net 2.0架构及功能说明(欢迎加入Moon.NET团队)
应作者要求,写了个简易的Demo,让大家更直观的了解MOON.NET,本文最后提供完整源码及SQL下载。
开发工具:VS2010、MSSQL 2008
开发环境:.NET Framework 2.0
第一步 创建数据库
创建数据库MoonDB
创建表News,并写入以下字段:
SysNo int
CreateUser nvarchar(50)
Title nvarchar(100)
[Content] text
CreateTime datetime
ModifyTime datetime
第二步 创建项目
打开VS工具,新建ASP.NET Web应用程序。
第三步 生成Model
配置代码生成器,例如:
EntitiesBuilder.exe.config
<add key="dbType" value="MSSQL" /> <add key="linkString" value="Server=ALEXLIU-PC;Database=MoonDB;uid=sa;Password=1;" />
打开代码生成器,点击“生成Model”,如图:

此后,你可以有2个选择:
1、点击“编译Model”,会在C盘根目录下生成两个文件MoonDB.dll、MoonDB.cs,你可以选择引用MoonDB.dll或将MoonDB.cs加入你的项目中。
2、点击“复制代码”,并在你的项目中新建一个Class文件,将代码粘贴进去。
第四步 引用DLL
在你创建的项目中,引用Moon.Orm、Moon.Web两个DLL。
第五步 写配置文件
在Web.config中写入配置,例如:
Web.config
<add key="dbType" value="MSSQL" /> <add key="linkString" value="Server=ALEXLIU-PC;Database=MoonDB;uid=sa;Password=1;" />
第六步 制作编辑页
新建编辑页Edit.aspx
Edit.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Edit.aspx.cs" Inherits="Web.Edit" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td style="text-align: right; width: 100px;"> SysNo </td> <td> <asp:Label ID="lblSysNo" runat="server"></asp:Label> </td> </tr> <tr> <td style="text-align: right; width: 100px;"> CreateUser </td> <td> <asp:TextBox ID="txtCreateUser" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="text-align: right; width: 100px;"> Title </td> <td> <asp:TextBox ID="txtTitle" runat="server"></asp:TextBox> </td> </tr> <tr> <td style="text-align: right; width: 100px;"> Content </td> <td> <asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine"></asp:TextBox> </td> </tr> <tr> <td style="text-align: right; width: 100px;"> CreateTime </td> <td> <asp:Label ID="lblCreateTime" runat="server"></asp:Label> </td> </tr> <tr> <td style="text-align: right; width: 100px;"> ModifyTime </td> <td> <asp:Label ID="lblModifyTime" runat="server"></asp:Label> </td> </tr> <tr> <td colspan="2" style="text-align: center;"> <asp:Button ID="btnSubmit" runat="server" Text=" 保 存 " OnClick="btnSubmit_Click" /> <asp:Button ID="btnReturn" runat="server" Text=" 返 回 " OnClick="btnReturn_Click" /> </td> </tr> <tr> <td> CurrentSql </td> <td> <asp:Label ID="lblCurrentSql" runat="server"></asp:Label> </td> </tr> </table> </div> </form> </body> </html>
Edit.aspx.cs
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Moon.Orm; using MoonDB; namespace Web { public partial class Edit : System.Web.UI.Page { private int _SysNo; protected void Page_Load(object sender, EventArgs e) { try { _SysNo = int.Parse(Request.QueryString["SysNo"]); } catch { _SysNo = 0; } if (!IsPostBack) { if (_SysNo != 0) { News news = DBFactory.GetEntity<News>(NewsTable.SysNo.Equal(_SysNo)); lblSysNo.Text = news.SysNo.ToString(); txtCreateUser.Text = news.CreateUser; txtTitle.Text = news.Title; txtContent.Text = news.Content; lblCreateTime.Text = news.CreateTime.ToString(); lblModifyTime.Text = news.ModifyTime.ToString(); lblCurrentSql.Text = DBFactory.CurrentSql; } } } protected void btnSubmit_Click(object sender, EventArgs e) { News news = new News(); news.CreateUser = txtCreateUser.Text.Trim(); news.Title = txtTitle.Text.Trim(); news.Content = txtContent.Text.Trim(); if (_SysNo == 0) //Add { news.CreateTime = DateTime.Now; news.ModifyTime = DateTime.Now; DBFactory.Add(news); lblCurrentSql.Text = DBFactory.CurrentSql; } else //Update { news.ModifyTime = DateTime.Now; news.SetOnlyMark(NewsTable.SysNo.Equal(_SysNo)); DBFactory.Update(news); lblCurrentSql.Text = DBFactory.CurrentSql; } } protected void btnReturn_Click(object sender, EventArgs e) { Response.Redirect("List.aspx"); } } }
lblCurrentSql是用来检查Sql用的。
新增:insert into [News]([CreateUser],[Title],[Content],[CreateTime],[ModifyTime]) values(@p1,@p2,@p3,@p4,@p5)
修改:update [News] set [CreateUser]=@p1,[Title]=@p2,[Content]=@p3,[ModifyTime]=@p4 where [SysNo]=24
*注意:Update之前需要调用一下SetOnlyMark方法,该方法是指定Update的Where条件。
查询:select * from [News] where [SysNo]=24
上图:


第七步 制作列表页
这里用到了Moon.Web的相关方法,通过Ajax进行分页,该DLL作者还未正式发布,我先尝个鲜。
首先建一张主页面List.aspx
List.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="Web.List" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> </head> <body> <form id="form1" runat="server"> <div id="pager"></div> <div> <asp:Literal ID="ltlPager" runat="server"></asp:Literal> </div> </form> </body> </html>
List.aspx.cs
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Moon.Orm; using MoonDB; using Moon.Web; namespace Web { public partial class List : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { int SumCount = (int)DBFactory.GetCount(NewsTable.SysNo.BiggerThan(0)); //ltlPager.Text = UI.GetPager("NewsList.aspx", "pager", SumCount, 5); ltlPager.Text = UI.GetPager("NewsList3.aspx", "pager", SumCount, 5); } } } }
页面上的<div id="pager"></div>是用来装列表数据的,这里用到了Moon.Web.UI.GetPager方法,该方法有4个参数和1个返回值:
第一个参数:string Ajax列表页地址
第二个参数:string 页面中存放列表的容器id
第三个参数:int 总数据条数
第四个参数:int 每页显示条数
返回值:string 分页按钮
然后建一张Ajax的列表页,可以用传统的DataGrid等控件进行绑定,也可以只输出html字符串,例如NewsList3.aspx:
NewsList3.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewsList3.aspx.cs" Inherits="Web.NewsList3" %>
NewsList3.aspx.cs
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Moon.Orm; using MoonDB; namespace Web { public partial class NewsList3 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { List<News> list = DBFactory.DefaultDB.GetWebPagedListDesc<News>( NewsTable.SysNo, NewsTable.SysNo.BiggerThan(0)); foreach (News a in list) { Response.Write( "<div>" + a.SysNo + "--" + a.CreateUser + "--" + a.Title + "--" + a.CreateTime + "--" + a.ModifyTime + "--<a target=\"_blank\" href=\"Edit.aspx?SysNo=" + a.SysNo + "\">编辑</a></div>" ); } } } }
这里用到了Moon.Orm.DBFactory.DefaultDB.GetWebPagedListDesc<T>方法,该方法有2个参数和1个返回值:
第一个参数:Field(Moon.Orm内置对象) 主键对象
第二个参数:Field 查询条件
返回值:List<T> 查询结果
列表查询Sql:select top 5 * from (select top 25 * from [News] where [SysNo]>0 order by [SysNo] asc) as [News] order by [SysNo] DESC
*注意:此Ajax列表页不能单独运行,GetWebPagedListDesc方法会报错:
System.ArgumentNullException: 值不能为空。
参数名: String
待作者说明。
上图:

第八步 运行&调试
至此,Demo制作已经完成。
(更新记录:源码中的SQL文件新建数据库时命名错误,于2012-04-16 09:50做了更新,未执行成功的可以重新下载)
本Demo只是一个简易的网站实例,没有做任何数据验证、异常捕获等处理,Demo中的实现方式也并非最佳实现方式,只是给想了解MOON.NET的园友一个直观的了解。MOON.NET的特色是高性能和操作简便,也可以与MVC等其他框架结合使用,想进一步了解的园友可以加QQ群:216965349。

浙公网安备 33010602011771号