CYQ.Data V5 MAction新增加SetExpression方法說明


需求:

 

 
在之前的CYQ.Data版本中,如果你要更新某一個字段的值+1;
 
解決方案:

 

 
1:如果用MAction操作,可能會如下代碼:
 
using(MAction action=new MAction(表名))
{
if(action.Fill(id))
{
    action.Set(字段名,action.Get<int>(字段名)+1);
    action.Update();
}
}
 
簡單的說,就是需要查詢出值,然后再用原值進行相關的操作,用這種代碼代價就是要多查一次。
 
 

2:另一種方式高性能的是使用MProc來直接操作Sql語句,可能會如下代碼:

 
using(MProc proc=new Proc("Update 表名 set 字段名=字段名+1"))
{
proc.ExeNonQuery();
}
 
用MProc基本是萬能的了,直接處理SQL語句和存儲過程。。。

 

 
大伙習慣了MAction多,所以希望MAction也有個順路功能:
 
不過好多人習慣用MAction,都圖個方便,連條SQL語句也想省一下。。。

事實上,我本人在多個項目中,也有這種需求,當然最后都是直接使用MProc處理了。
 
很多時候,我一直在尋找一種最優方式,能處理這種值+1,值-1的問題,不過每每看着架構,不好下手,一直沒找到切入點和使用方法。
 
 

比如一開始想的:

 
using(MAction action=new MAction(表名))
{
action.Set(字段名,“[字段名]+1”);
action.Update("id=1");
}
 
但是這種方式,實現起來,沒想象的簡單,而且這值是字符串還是表達式?分不清也說不明,所以一直卡在以何種使用方式上。
 
 

CYQ.Data 框架設計原則:

 
CYQ.Data 框架的設計,很多時候,是先思考使用的方法,再去想怎么實現的,先想象出最簡單的使用方式,再去想能不能實現,而不是實現了一個功能,卻很難使用。

為此,但網友又對我提出這種需求的要求時,我又花了N個小時,看着代碼發呆,每次我思考問題或有某項功能時,我都會看着代碼發呆幾個小時。。當然是在不停的思考。。
 
 

后來終於設計出最終解決方案:

 
using(MAction action=new MAction(表名))
{
action.Set(字段名,值);
action.SetExpression(“字段名=字段名+1”);
action.SetExpression(“字段名=len(字段名)+1”);
action.Update();
}
 
 

通過增加一個表達式方法,基本上有點萬能了,事實在后端,組成的Update語句大體為:

 
update 表名 set 表達式,字段名=@字段名 where ...
 
 

簡單說,就是表達式只是簡單的被附加到原來的set的后面,最終被組裝成SQL執行,當然了,如果你想高級點用參數化也是可以的。

 
            using (MAction action = new MAction("Blog_Class"))
            {
                action.SetExpression("count=count+@Value");//表達式升級帶參數化。
                action.SetPara("Value", 2, DbType.Int32);//設置參數化值
                action.Update();
            }
 
 

到此,基本上有表達存在,可以處理N種不同的需求了,方便性提升了不少。

 

補充: 

不小心把文章“只允許注冊用戶訪問”給打上勾了,結果發現注冊用戶的閱讀數僅88,根據統計,還有近27個是為了看文章被逼登陸了一下。

周末的行情訪問量這么低?大伙都跑哪去偷情了?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM