前言:
如下功能在國慶期就完成並提早發佈了,但到今天才有時間寫文介紹,主要是國慶後仍是選擇就任了,悲催的是上班的地方全公司都能上網,惟獨開發部竟不讓上網,是個局域網。數據庫
也不是全不能上,房間裏有三臺能上網的機子(兩臺筆記本+一臺臺式機),下載資料還得用公司的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了。
下週應該會招一兩個戰友,人在廣州的有興趣的能夠給我發私信。