企业开发宗旨在于高效与便捷以及系统升级与维护的稳定.此框架为此而架构设计,目标在于打造一个高效能的.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);
}
}
}
脚本引擎代码生成