開源數據訪問組件Smark.Data 1.7新增功能


借助於擴展方法的功能,這一版本的改進可以讓數據庫操作變得更簡單方便,在數據庫操作相關會給你一種全新的體驗.主要改進有以下幾點:

  • 條件表達式可以直接和string進行組合,從而更靈活地創建復雜的查詢條件
  • 擴展Load_方法,可以直接在值對象的基礎上獲取相關ID數據對象
  • 擴展一系的查詢方法,可直接在string的sql上進行數據操作,包括查詢獲取查詢對象數據.在操作過程完全不需要借助於其他對象來處理.
  • 擴展可以直接在存儲過程對象進行執行操作
以上的一系列擴展都是直接能操作數據,而不再需引用相關條件對象或數據庫上下文對象,讓數據操作變得更簡單靈活.

對象獲取和保存

    var emp = 3.Load_<Employee>();
    emp.Notes += "_test";
    emp.Save_();

以上就是簡單地根據ID值獲取對象,修改並保存.由於擴展方法容易導致和其他方法沖突,所以在方法添加了_以便區分.

SQL執行

在原來的版本時處理一些SQL執行,必須借助於一些對象.就是必須創建一個SQL執行對象來處理SQL.但在1.7版中就不再需要這樣做,直接在一個SQL的String基礎上就能執行操作.

"delete * from employees".Execute();

以上是簡單地執行一個delete的sql語,當然也可以執行一個查詢並返回一個對象列表

    foreach (var item in "select * from employees".List<Employee>())
    {
        Console.WriteLine(item.FirstName);
    }

查詢需要設置相關參數

    foreach (var order in "select * from orders where employeeid=@p1".Parameter("p1", 3).List<Order>())
    {
        Console.WriteLine("orderid:{0}\t orderdate:{1}", order.OrderID, order.OrderDate);
    }

存儲過程執行

    CustOrderHist coh = new CustOrderHist();
    coh.CustomerID = "ALFKI";
    coh.ExecProc_();

只需要創建一個存儲過程描述對象,設置好相關參數值就可以直接執行處理,當然也可以執行並返回一個查詢結果.

    CustOrderHist coh = new CustOrderHist();
    coh.CustomerID = "ALFKI";
    foreach (var data in coh.ExecProcToObjects_<CustOrderHistData>())
    {
        Console.WriteLine("{0}\t{1}", data.ProductName, data.Total);
    }

對象條件和string描述的條件整合

在原有的條件表達式中處理復雜的SQL查詢變得比較麻煩,實際情況下一些復雜的條件的確沒有直接SQL來得直觀,因此新版條件表達式可以直接和string描述的條件整合並產生新的表達式對象進行數據操作.

    Expression exp = new Expression();
    exp &=  Order.orderDate >= "1996-7-1";
    exp &= " employeeid in (select employeeid from employees where region=@p1)".Add("p1", "WA");
    foreach (var order in exp.List<Order>())
    {
        Console.WriteLine("orderid:{0}\t orderdate:{1}", order.OrderID, order.OrderDate);
    }

總結

以上幾種操作的簡化相信可以讓你操作數據庫變得更輕松和靈活.

組件官網:http://www.ikende.com/SmarkData.aspx

源代碼網站:http://smark.codeplex.com/


免責聲明!

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



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