企业开发宗旨在于高效与便捷以及系统升级与维护的稳定.此框架为此而架构设计,目标在于打造一个高效能的.NET开发框架。
Moon.NET 由两部分组成:Qin.Data (一个高性能的ORM系统,其特色是提供便捷的开发和高效的数据库访问性能以及方便便捷的系统升级,内含代码生成器、代码自动编译);Qin.Web (一个快速的ASP.NET服务端框架,内含一个前端js脚本一引擎[有了它,你只需专注于业务逻辑,几乎绝大部分代码由引擎生成]、以及实现权限认证的AOP方案和一个前端UI库).其中的Qin.Data 已被用于合富网络有限公司的数据层取代原有的实体框架.
Qin.Data的相关介绍
背景 公司的项目开始实体框架,但对于公司的需求其性能不如意.故此开发一个适合公司需求的数据库框架.虽然市面的有很多类似框架,虽然各有所长但短处尤在 .
介绍 Qin.Data是一个通用数据库处理框架(包含MSSQL ACCESS SQLITE EXCEL MYSQL DB2 ORACLE...只要你愿意实现接口就可以).很便捷地进行常用数据库操作(增删改查).其性能是几近纯ADO.NET.对于实体的查询采用emit实 现,如果您还不满意可用此框架的代码生成器直接生成纯ADO.NET SQL形式.其主要特色就是性能和便捷的操作.
特色 1.高性能(该框架采用纯的ADO.NET进行框架,避免Linq以及反射带来的性能损失);
2.易用性强(配置简单,智能感知,代码生成器的辅助,会sql就可(可以自我性能优化)) ;
3.多数据库支持(整个框架采用工厂模式设计,目前支持oracle,mssql,mysql,sqlite,acess,如果需要可自我扩增)
4.查询语法糖功能(linq一样写代码) 5.多数据源支持
配置简单 < appSettings > < add key ="web" value ="No" /> <!-- 是否是网站开发 --> < add key ="databaseName" value ="MSSQL" /> <!-- 数据库的类型 还可以写MYSQL,SQLITE,ACCESS等.... --> < add key ="linkString" value ="Server=mainserver;database=HD01SystemDB;Uid=sa;Pwd=123" /> </ appSettings >
代码功能演示 public static void Main ( string [] args
) { //1单值查询----------------------------------- DBTool db=
new DBTool ( Table
. EventBaseSet
); db
. Where=EventBaseSet
. EventID_
. Equals_ ( 2 ); var str=db
. GetOneField
< string >( EventBaseSet
. Domain_
); Console
. WriteLine ( "单值查询:" + str
); //2单行查询--------------- db
. Where=EventBaseSet
. Creater_CreaterID_
. Equals_ ( 3 ); var entitye=db
. GetEntity
< EventBaseSet
>(); var row=db
. GetDestinationFields ( EventBaseSet
. Domain_
, EventBaseSet
. HeadBGColor_
); var domain=row
[ 0 ]; //3多行查询------------------------------ db
. Where=EventBaseSet
. Creater_CreaterID_
. BiggerThan_ ( 3 ); var list=db
. GetEntitesList
< EventBaseSet
>(); var table=db
. GetDataTable (); //4复合查询-------------------- db
. Where=EventBaseSet
. EventName_
. Contains_ ( "er" ). And_ ( EventBaseSet
. Domain_
. EqualsStr_ ( "ertertert" )); var domainName=db
. GetOneField
< string >( EventBaseSet
. Domain_
); Console
. WriteLine ( "复合查询:" + domainName
); //5多表查询-------------- db. Where="交叉查询语句" ; db. GetEntitesList< 自定义类型>();
//6添加数据 db
. SetInsertField ( EventBaseSet
. Creater_CreaterID_
, 33 ); db
. SetInsertField ( EventBaseSet
. EnabledBodyHtml_
, true ); db
. SetInsertField ( EventBaseSet
. EventName_
, "测试" ); db
. SaveChanges (); var id=db
. NewID
; //7更新数据------------------------ db
. Where=EventBaseSet
. EventID_
. Equals ( 3 ); db
. SetUpdateField ( EventBaseSet
. EnabledBodyHtml_
, false ); db
. SetUpdateField ( EventBaseSet
. Domain_
, "www.badi.com" ); db
. SaveChanges (); //8前N行查询---------------- Console
. WriteLine ( "前N行查询:" ); db
. Where=EventBaseSet
. EventID_
. BiggerThan_ ( 0 ); var list=db
. GetTopList
< EventBaseSet
>( 4 ); foreach ( var element
in list
) { Console
. WriteLine ( element
. EventName
); } //9删除数据------------------- db
. DeleteWhen= EventBaseSet. Creater_CreaterID_. Equals ( 3 );
db
. SaveChanges (); //纯sql支持 var deleteSql=
"delete from EventBaseSet where EventID=2" ; DBTool
. Database
. ExecuteOneSql ( deleteSql
); //10 json支持 var json=
"" ; DBTool
. UpdateDatabaseByJSON ( json
); DBTool
. InsertDatabaseByJSON ( json
); //11纯ADO.NET查询支持(代码生成器),提供代码生成器 //12存储过程支持 SuperSqlParameter p=
new SuperSqlParameter ( "@a" , DbType
. Int64
, 3 ); SuperSqlParameter p2=
new SuperSqlParameter ( "@b" , DbType
. DateTime
, DateTime
. Now
); var list=
new Queue
< QinParameter
>(); list
. Add ( p
); list
. Add ( p2
); DBTool
. Database
. ExecuteProc ( "myproc" , list
); Console
. WriteLine ( "Press any key to continue . . . " ); Console
. Read (); }
代码生成器 数据库升级问题(我们常常面临数据库表的变动问题)
Qin.Data中不必担心这些东西,因为实体全由代码生成器生成,更新一次数据库,你重新生成一次DLL(代码生成器带有编译功能)
Qin.Web相关介绍
背景 在长期的MVC的开发中,发现许多开发上的诸多不变之处,故此架构了Qin.Web(一个快速的ASP.NET服务端框架,内含一个前端js脚本一引擎 [有了它,你只需专注于业务逻辑,无论是前端还是后端代码都可以靠此引擎生成],以及实现权限认证的AOP方案和一个前端UI库(尚待完善)).
简介 Qin.Web包括
1.一个快速的ASP.NET服务端框架(你只需转注入业务逻辑)
2.内含一个前端js脚本一引擎 (有了它,你只需专注于业务逻辑,无论是前端实现还是后端代码都可以靠此引擎生成)
3.实现权限认证的AOP方案和一个前端UI库(尚待完善)).
特色 1.使用便捷2.优秀便捷的脚本引擎机制,性能优异无服务端控件,便于美工使用
3.配置简单
4.优秀的UI库
使用实例介绍 1.实现一个简单的无刷新分页功能
后端代码(非MVC模式)
public partial class Test : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 小页面的位置,装载小页面的dom,总数据量,每页多少个 this .Pager= UI.GetPager(" smallPage.aspx " ," qsmy " ,100 ,2 ); } public string Pager{ get ;set ; } }
前端代码
< html xmlns ="http://www.w3.org/1999/xhtml" > < head runat ="server" > < title ></ title > < script type ="text/javascript" src ="Scripts/jquery-1.6.2.min.js" ></ script > </ head > < body > < form id ="form1" runat ="server" > < div > </ div > < hr /> < hr /> < br /> <% = this.Pager %> < div id ="qsmy" > </ div > </ form > </ body > </ html >
效果图
2.编辑器功能
后端代码
public partial class Test : System.Web.UI.Page { protected void Page_Load (object sender, EventArgs e) { //kindeditor 的位置 var path="Scripts/kindeditor/kindeditor-min.js" ; var ret=UI.GetKindEditor (true ,path,"editor" ); this .Editor=ret; } public string Editor{ get ;set ; } }
前端代码
<% @ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="MoonAjax.Test" %> <!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 type="text/javascript" src="Scripts/jquery-1.6.2.min.js"></script> </ head> <body> <form id = "form1" runat = "server" > <div> <% =this .Editor%> <textarea id = "editor" rows = "8" cols = "100" > Qin.Web之文本编辑器</ textarea> </ div> </ form> </ body> </ html>
实现界面:
2.强大的脚本引擎
实现一个页面数据的加载和数据更新
前端代码
<% @ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MoonAjax.WebForm1" %> <!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> <title > model加载和数据更新</ title > <meta http-equiv = "content-type" content = "text/html; charset=utf-8" / > <meta http-equiv = "CACHE-CONTROL" content = "NO-CACHE" / > <meta http-equiv = "PRAGMA" content = "NO-CACHE" / > <script type="text/javascript" src="Scripts/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="Scripts/Qin.Tool.js"></script> <script src="Thrid/art/artDialog.js?skin=aero" type="text/javascript"></script> <script> $(function () { Qin_LoadDataToDom("MoonAjax.UserInfoAction" , "GetUserInfo" , {}, "form_UserInfo" ); }); function AjaxUpdateUserInfo() { var ID = $("#keyID" ).val(); Qin_AjaxUpdate("MoonAjax.UserInfoAction" , "AjaxUpdateUserInfo" , "form_UserInfo" , "ID" , ID, { otherData: 22 }, function (data) { alert("主键为" +data+" update success" ); }); }; </script> </ head> <body> <form id = "form_UserInfo" > <input id = "keyID" class = "Key" field = "ID" type = "hidden" / > <table style = "width: 100%;" > <tr> <td> 姓名: </ td> <td> <input field = "UserName" type = "text" / > </ td> </ tr> <tr> <td> 性别 </ td> <td> <input name = "Sex" field = "Sex" value = "true" type = "radio" / > 男<input name = "Sex" field = "Sex" value = "false" type = "radio" / > 女 </ td> </ tr> <tr> <td> 年龄 </ td> <td> <input field = "Age" type = "text" / > </ td> </ tr> <tr> <td> 北京户口 </ td> <td> <input field = "IsBeiJing" type = "checkbox" / > </ td> </ tr> <tr> <td> 年龄段 </ td> <td> <select field = "AgePeriod" ><option value = "1" > 老年人</ option><option value = "2" > 中年人</ option><option value = "3" > 年轻人</ option></ select> </ td> </ tr> </ table> <input type = "button" onclick = "AjaxUpdateUserInfo();" value = "更新用户数据" / > </ form> </ body> </ html>
后端代码(绝大部分逻辑代码由引擎自动生成).
/* * 由SharpDevelop创建。 * 用户: qinshichuan * 日期: 2011-12-9 * 时间: 11:03 * * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件 */ using System; using Qin.Web; using Qin.Data; using MoonModel; namespace MoonAjax { /// <summary > /// Description of UserInfo. /// </ summary > public class UserInfoAction:QinAction { public static void GetStringData () { ReturnTextString ("秦时明月Ajax框架欢迎你" ); } public static void GetJSONData () { var userName = Request["userName" ]; var password = Request["password" ]; var data = new { Age=12 ,Address="重庆" }; ReturnJSONString (data); } public static void InsertFormData () { } public static void AjaxInsertUserInfo () { DBTool db = new DBTool (Table.PersonSet); var UserName = Request["UserName" ]; var Sex = Request["Sex" ]; var Age = Request["Age" ]; var IsBeiJing = Request["IsBeiJing" ]; var AgePeriod = Request["AgePeriod" ]; var otherData = Request["otherData" ]; db.SetInsertField (PersonSet.UserName_, UserName); db.SetInsertField (PersonSet.Sex_, Sex); db.SetInsertField (PersonSet.Age_, Age); db.SetInsertField (PersonSet.IsBeiJing_, IsBeiJing); db.SetInsertField (PersonSet.AgePeriod_, AgePeriod); //db.SetInsertField(PersonSet.otherData_, otherData); db.SaveChanges (); ReturnTextString (db.NewID); } [Log ()] public static void AjaxUpdateUserInfo () { DBTool db = new DBTool (Table.PersonSet); db.Where = PersonSet.ID_.Equals_ (Request["PrimaryKey" ]); var ID = Request["ID" ]; var UserName = Request["UserName" ]; var Sex = Request["Sex" ]; var Age = Request["Age" ]; var IsBeiJing = Request["IsBeiJing" ]; var AgePeriod = Request["AgePeriod" ]; var otherData = Request["otherData" ]; var PrimaryKey = Request["PrimaryKey" ]; db.SetUpdateField (PersonSet.UserName_, UserName); db.SetUpdateField (PersonSet.Sex_, Sex); db.SetUpdateField (PersonSet.Age_, Age); db.SetUpdateField (PersonSet.IsBeiJing_, IsBeiJing); db.SetUpdateField (PersonSet.AgePeriod_, AgePeriod); db.SaveChanges (); ReturnTextString (PrimaryKey); } [Log ()] public static void GetUserInfo (){ DBTool db = new DBTool (PersonSet.TableName_Qin); db.Where = PersonSet.ID_.Equals_ (1 ); var user = db.GetEntity<PersonSet>(); ReturnJSONString (user); } } }
脚本引擎代码生成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!