前言:
如下功能在国庆期就完成并提早发布了,但到今天才有时间写文介绍,主要是国庆后仍是选择就任了,悲催的是上班的地方全公司都能上网,惟独开发部竟不让上网,是个局域网。数据库
也不是全不能上,房间里有三台能上网的机子(两台笔记本+一台台式机),下载资料还得用公司的U盘再转到本身电脑,这种半封闭的环境,至关的让人不适应,有种欲仰天吐血的感受。安全
这一周我都向三个带总的领导反映了上网问题,不过没啥响应,估计是没戏。架构
因而我只有把其中一台能上网的笔记本拿到本身桌子上去独自占用了,勉强也能上下网了,不过基于安全问题,我也很差在那机子里登录私人帐号。 框架
通过一周的研究,我发现解决方案仍是有的:由于公司的规定只是开发的机子不让上网而已,本身按理应该能够带笔记本去上网,不过我奇怪的是居然整个部门都没人带笔记本去,不知道搞啥名头。工具
好了,废话很少说了,下面入文章的正题:性能
CYQ.Data V5 配置工具:
最新更新了配置工具,新的界面截图以下: 网站

本次调整的功能以下:ui
1:编码模式:新增长纯实体的生成:编码
至此,CYQ.Data 就有了三种编码模式,分别是:spa
A: 枚举型(MAction、MProc)- 性能最优的编码模式
B: 实体型(充血型的ORM操做 - 须要实体类继承CYQ.Data.Orm.OrmBase,也支持CodeFirst模式)
C: 纯实体(贫血型的ORM操做 - 经过本次新增的CYQ.Data.Orm.DBFast 静态类来操做)
2:生成的实体带说明文字。
3:默认名称空间增长{0}来表明数据库名称。
4:多数据库模式下,默认的数据库连接,约定对应的Web.Config的配置为"数据库名称Conn“。
下面示例生成一个实体类以下:
using System;
namespace Web.Entity.Demo
{
public
class Users
{
///
<summary>
///
标识ID
///
</summary>
public
int? ID {
get;
set; }
///
<summary>
///
用户名
///
</summary>
public
string UserName {
get;
set; }
///
<summary>
///
建立日期
///
</summary>
public DateTime? CreateTime {
get;
set; }
}
}
对于这样的实体,默认的数据库连接就是:
<add name=
"
DemoConn
" connectionString=
"
server=.;database=demo;uid=sa;pwd=123456
"/>
若是DemoConn不存在,则会取默认的Conn项。
工具的源码下载地址:http://www.cyqdata.com/download/article-detail-426
CYQ.Data.Orm.DBFast 类介绍
这是我最近新增长的静态类,主要是为了节省点代码,方便一些基础的操做。
示例代码(以上面的的Users实体为示例):
查询实体:
Users u=DBFast.Find<Users>(1);//一行查一个实体。
List<Users> uList=DBFast.Select<Users>(2,10,"id>10");//分页查询知足条件的列表。
增长数据:
DBFast.Insert<Users>(new Users{UserName="a";});
更新数据:
DBFast.Update<Users>(new Users{UserName="a";},1);
删除数据:
DBFast.Delete<Users>(1);
以上就是简的操做,增长这个静态类的意图,是为了简化一些常规的操做,让一行代码去解决,减小代码量。
因此这个静态类并非万能的,其它复杂性的的操做方式, 建议使用枚举型的常规操做。
下面提供这个DBFast静态类的源码,细看源码,会发现这些DBFast类操做都仅是MAction类的二次封装造成的:
using System;
using System.Collections.Generic;
using System.Text;
using CYQ.Data.Table;
namespace CYQ.Data.Orm
{
///
<summary>
///
快速操做操做类。
///
</summary>
public
static
class DBFast
{
///
<summary>
///
查找单条记录
///
</summary>
///
<typeparam name="T">
实体类型
</typeparam>
///
<param name="where">
条件
</param>
///
<param name="columns">
指定查询的列(可选)
</param>
///
<returns></returns>
public
static T Find<T>(
object
where,
params
string[] columns)
{
T result =
default(T);
MDataRow row =
null;
using (MAction action = GetMAction<T>())
{
if (columns !=
null && columns.Length >
0)
{
action.SetSelectColumns(columns);
}
if (action.Fill(
where))
{
row = action.Data;
}
}
if (row !=
null)
{
result = row.ToEntity<T>();
}
return result;
}
public
static List<T> Select<T>()
{
int count;
return Select<T>(
0,
0,
null,
out count,
null);
}
///
<summary>
///
列表查询
///
</summary>
///
<param name="where">
查询条件[可附带 order by 语句]
</param>
///
<returns></returns>
public
static List<T> Select<T>(
string
where,
params
string[] columns)
{
int count;
return Select<T>(
0,
0,
where,
out count, columns);
}
///
<summary>
///
列表查询
///
</summary>
///
<param name="topN">
查询几条
</param>
///
<param name="where">
查询条件[可附带 order by 语句]
</param>
///
<returns></returns>
public
static List<T> Select<T>(
int topN,
string
where,
params
string[] columns)
{
int count;
return Select<T>(
1, topN,
where,
out count, columns);
}
public
static List<T> Select<T>(
int pageIndex,
int pageSize,
params
string[] columns)
{
int count;
return Select<T>(pageIndex, pageSize,
null,
out count, columns);
}
public
static List<T> Select<T>(
int pageIndex,
int pageSize,
string
where,
params
string[] columns)
{
int count;
return Select<T>(pageIndex, pageSize,
where,
out count, columns);
}
///
<summary>
///
查找多条记录
///
</summary>
///
<typeparam name="T">
实体类型
</typeparam>
///
<param name="pageIndex">
第N页
</param>
///
<param name="pageSize">
每页N条
</param>
///
<param name="where">
条件
</param>
///
<param name="count">
返回记录总数
</param>
///
<param name="columns">
指定查询的列(可选)
</param>
///
<returns></returns>
public
static List<T> Select<T>(
int pageIndex,
int pageSize,
object
where,
out
int count,
params
string[] columns)
{
MDataTable dt =
null;
using (MAction action = GetMAction<T>())
{
if (columns !=
null && columns.Length >
0)
{
action.SetSelectColumns(columns);
}
dt = action.Select(pageIndex, pageSize,
where,
out count);
}
return dt.ToList<T>();
}
///
<summary>
///
删除记录
///
</summary>
///
<typeparam name="T">
实体类型
</typeparam>
///
<param name="where">
条件
</param>
///
<returns></returns>
public
static
bool Delete<T>(
object
where)
{
bool result =
false;
using (MAction action = GetMAction<T>())
{
result = action.Delete(
where);
}
return result;
}
public
static
bool Insert<T>(T t)
{
return Insert<T>(t, InsertOp.ID);
}
///
<summary>
///
添加一条记录
///
</summary>
///
<typeparam name="T">
实体类型
</typeparam>
///
<param name="t">
实体对象
</param>
///
<returns></returns>
public
static
bool Insert<T>(T t, InsertOp op)
{
bool result =
false;
MDataRow row =
null;
using (MAction action = GetMAction<T>())
{
action.Data.SetFromEntity(t);
result = action.Insert(op);
if (op != InsertOp.None)
{
row = action.Data;
}
}
if (row !=
null)
{
row.SetToEntity(t);
}
return result;
}
public
static
bool Update<T>(T t)
{
return Update<T>(t,
null);
}
///
<summary>
///
更新记录
///
</summary>
///
<typeparam name="T">
实体类型
</typeparam>
///
<param name="t">
实体对象
</param>
///
<param name="where">
条件
</param>
///
<returns></returns>
public
static
bool Update<T>(T t,
object
where)
{
bool result =
false;
using (MAction action = GetMAction<T>())
{
action.Data.SetFromEntity(t);
result = action.Update(
where);
}
return result;
}
private
static MAction GetMAction<T>()
{
string conn =
string.Empty;
MAction action =
new MAction(GetTableName<T>(
out conn), conn);
action.SetNoAop();
return action;
}
private
static
string GetTableName<T>(
out
string conn)
{
conn =
string.Empty;
Type t =
typeof(T);
string[] items = t.FullName.Split(
'
.
');
if (items.Length >
1)
{
conn = items[items.Length -
2] +
"
Conn
";
items =
null;
}
string tName = t.Name;
t =
null;
return tName;
}
}
}
结束语:
新进的公司,一开始觉得是开发电子商务类的网站,因此我经三考虑的架构选型不是WebForm也不是MVC,而是打算采用QBlog那一套的框架,还特地思改进了CYQ.Data里的XHtmlAction模板引擎,增长了CMS的标签功能,觉得要上战场,结果进去一天就发现,是开发的分销商订单系统,数据是和ERP对接,因而架构目前选型就变动为EasyUI+CYQ.Data+WebForm了。
下周应该会招一两个战友,人在广州的有兴趣的能够给我发私信。