Git.Framework 框架隨手記--ORM編輯刪除

賀臣發表於2014-05-07

  前面一篇文章<Git.Framework 框架隨手記--ORM新增操作>主要講解了如何使用Git.Framework往資料庫中新增資料。其操作過程相對簡單,本章主要記錄如何編輯資料和修改資料。

 

  一. 編輯資料

    在Git.Framework中主要提供瞭如下編輯方法

int Update(List<T> list);
int Update(T entity);
int Update(List<T> list, bool isOpenTrans);
int Update(T entity, bool isOpenTrans);

    以上方法可以分為兩組,區別在於兩個輸入引數的方法是可以啟用事務操作的,在前面的文章中已經提到過。預設是不啟用事務操作的。

public int Update(AdminEntity entity)
{
            entity.Include(a => new { a.Phone, a.Email, a.Mobile, a.RealName, a.RoleNum, a.DepartNum, a.UserName, a.PassWord, a.UpdateTime });
            entity.Where(a => a.UserCode == entity.UserCode);
            int line = this.Admin.Update(entity);
            return line;
}

    結合昨天使用的實體對映類,資料訪問介面,以及資料操作類,我們隊Admin表進行資料修改操作。

entity.Include(a => new { a.Phone, a.Email, a.Mobile, a.RealName, a.RoleNum, a.DepartNum, a.UserName, a.PassWord, a.UpdateTime });

    這段程式碼應該很熟悉,上一篇文章已經介紹到了這個用法,用於包含操作哪些欄位,其中至少包含一個欄位。但是這裡要注意的是,如果Include中包含一個主鍵或者自動標識列是不會去真正包含的,其預設會將其他過濾掉,在實際的資料庫操作過程中我們也不會去修改主鍵值。

    要想執行語句就要呼叫Update() 方法,該方法會向資料庫傳送命令操作。上一篇已經瞭解到資料庫操作實際上最終是生成SQL語句執行的。上面一段程式碼生成的SQL語句如下:

UPDATE [dbo].[Admin] SET [Phone]=@Phone,[Email]=@Email,[Mobile]=@Mobile,[RealName]=@RealName,[RoleNum]=@RoleNum,[DepartNum]=@DepartNum,[UserName]=@UserName,[PassWord]=@PassWord,[UpdateTime]=@UpdateTime  WHERE Admin.[UserCode]=@0_Admin_UserCode

    如果看到這種程式碼相信大家都比較熟悉了,一個帶條件的SQL語句,其中都是使用佔位符引數。在前面幾篇也講到了,這個框架的最底層其實還是ADO.NET,只是在表面封裝了一層看不到而已,而且在ADO.NET底層封裝還提供了相應的訪問類,後面詳述。

 

  二. 編輯多行資料

    在過載Update()方法的時候,我們看到有個引數List<T>,這個方法可以用於同時修改多行資料。

List<UA_USERS> list = new List<UA_USERS>();
UA_USERS user = new UA_USERS();
user.PASSWORD = "777777777";
user.Include(a => new { a.PASSWORD });
user.USER_ID = "AA0";
user.Where(a => a.USER_ID == user.USER_ID);
list.Add(user);

user = new UA_USERS();
user.PASSWORD = "55555555555";
user.USERNAME = "艾弗森";

user.Include(a => new { a.PASSWORD,a.USERNAME });
user.USER_ID = "AA1";
user.Where(a => a.USER_ID == user.USER_ID);
list.Add(user);

int line = provider.Update(list,true);
修改多行資料

    我們再集合中新增了三個實體物件,每個實體物件都有其相應的修改欄位以及條件,在呼叫Update 方法的時候會生成3行SQL語句,然後同時傳送命令執行。這裡三條語句的執行不是迴圈開啟3個連線,而是使用一個連線同時傳送三行SQL,相當於批處理模式。

 

   三. 刪除方法簡介

(1) int Delete(IEnumerable<int> ids);
(2) int Delete(int id);
(3) int Delete(object value);
(4) int Delete(T entity);
(5) int Delete(IEnumerable<int> ids, bool isOpenTrans);
(6) int Delete(int id, bool isOpenTrans);
(7) int Delete(object value, bool isOpenTrans);
(8) int Delete(T entity, bool isOpenTrans);
(9) int DeleteBatch(IEnumerable<T> list, bool isOpenTrans);

    在刪除資料上提供了九個過載方法,但是在這九個方法中並不是每個方法都用的那麼多。其中這九個方法可以分為三組: (1) 不用事務處理 (2) 使用事務處理 (3) 批量刪除

    但是要注意的是這裡的批量刪除不是指刪除多行資料,而是和上面的Update()方法一樣,同時執行多個SQL語句.

    (1) int Delete(IEnumerable<int> ids); 根據主鍵自動標識列批量刪除資料

    (2) int Delete(int id); 根據逐漸標識列刪除資料

    (3) int Delete(object value);根據主鍵值刪除資料

    (4) int Delete(T entity); 根據自定義條件刪除資料,用的最多,比較靈活

    (9) int DeleteBatch(IEnumerable<T> list, bool isOpenTrans);批量刪除資料,用的也比較多,自定義條件刪除

InStorDetailEntity detail = new InStorDetailEntity();
detail.Where(a => a.OrderNum == entity.OrderNum);
this.InStorDetail.Delete(detail);

    上面這段程式碼用於刪除InStorDetail表中的資料,而且附帶了條件,使用Where應該都明白和SQL中的Where是一樣的作用

detail.Where(a => a.OrderNum == entity.OrderNum);

    只是這裡的Where是一個方法,並且使用到了Lambda表示式,我們可以簡單的翻譯為 欄位OrderNum= 值; 這個在學習過Linq to SQL或者Entity Framework的應該都可以明白。如果最終要執行還是要呼叫Delete 方法的。

DELETE FROM [dbo].[InStorDetail]  WHERE InStorDetail.[OrderNum]=@0_InStorDetail_OrderNum

    上面的程式碼生成如上SQL語句,如果.NET程式碼不能夠理解其意思,對比SQL就應該明白了

 

相關文章