天天看點

Linq to Sql 更新資料時容易忽略的問題

越來越多的朋友喜歡用Linq to Sql來進行開發項目了,一般我們都會遇到CRUD等操作,不可否認,在查詢方面Linq真的帶來很大的便利,性能方面也表現不錯,在插入操作和删除操作中,Linq的表現也還不錯,但是在更新某條記錄的時候,性能就相對比較弱了,我們一般會使用ExecuteSql等方法來執行腳本。

不過有時候,我們還是會使用Linq to Sql來進行Update,執行的步驟:擷取一個記錄-〉更新字段 -〉submitChanges()

昨天遇到了一個問題,流程都沒有錯,但是更新的時候始終沒有更新到資料庫,

大概得僞代碼如下:

public void UpdateUser(User user)

{

            DataContext context = new DataContext("conn");

            User existsUser = GetUser(user.ID);

            existsUser.Name = user.Name;

            //.............

            context.SubmitChanges();

}

簡單的代碼,大概的意思也是擷取一個記錄,然後更新字段,再submitChanges,大體看看沒有錯,但是!!!!大家有沒有發覺,我們的context是個私有變量,而我們的GetUser雖然也是從context中取得,不過它用的是它自己的context,也就是說對于程式來說,它是兩個對象,是以我們這裡在submitChanges的時候,無論你怎麼改都是沒有效果的,資料庫中始終不會改變,My God ,或許你會覺得這誰不知道啊,但是往往我們真的會忽略這一點,記得以前考試,往往都是難的題目基本上全對,但越簡單越容易的題目,卻會經常犯錯,希望這些能對你有些啟發。

好了,知道了為什麼出錯,修改也簡單了,兩種方法:

方法一:

    DataContext context = new DataContext("conn");

            //從目前context取

    User existsUser = context.Users.SingleOrDefault(e => e.ID.Equals(user.ID);

    existsUser.Name = user.Name;

    context.SubmitChanges();

方法二:

//把context設成上下文公用的

DataContext context = new DataContext("conn");

    User existsUser = GetUser(user.ID);           

好了,文章比較簡單,也或許你覺得不值得一提,目的也不是為了解決這個問題,希望大家能在做項目中,一定要仔細,因為往往你的一個小小的疏忽,會給項目、公司帶來不可預知的後果。