Alex.Liu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MOON.NET 简易DEMO发布

  最近,看到园子里发布了一个新的.net框架--MOON.NET。本着好奇和学习的心态,照着作者的博文,下载DLL、写示例代码。在这个过程中出现了很多问题,比如:
  1、程序中出现异常,面对陌生的异常提示和编译后的DLL一头雾水。
  2、看着VS中点出来的一大堆方法和陌生的参数不知所措。

  带着这些问题,开始了与作者的交流。在交流的过程中,才知道作者是一个人独立在做维护工作,虽然很多地方还不完善,但个人感觉该框架容易上手、操作简便且性能较高。当然,现在市面上的框架数不胜数,各有长短,小弟不才,这个留给前辈级的人物去讨论。

 

  对于MOON.NET框架的相关介绍,这里就不多说了,大家可以去看作者原文:

  Moon.Net 2.0架构及功能说明(欢迎加入Moon.NET团队)

  MOON.ORM类比其他类型ORM的区别,以及我为什么写此架构

  MOON.ORM 3.6发布下载 及帮助文档

 

  应作者要求,写了个简易的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)

  (更新记录:源码中的SQL文件新建数据库时命名错误,于2012-04-16 09:50做了更新,未执行成功的可以重新下载)

 

  本Demo只是一个简易的网站实例,没有做任何数据验证、异常捕获等处理,Demo中的实现方式也并非最佳实现方式,只是给想了解MOON.NET的园友一个直观的了解。MOON.NET的特色是高性能和操作简便,也可以与MVC等其他框架结合使用,想进一步了解的园友可以加QQ群:216965349。

 

posted on 2012-04-16 00:58  Alex.Liu  阅读(1142)  评论(3)    收藏  举报