越來越多的朋友喜歡用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);
好了,文章比較簡單,也或許你覺得不值得一提,目的也不是為了解決這個問題,希望大家能在做項目中,一定要仔細,因為往往你的一個小小的疏忽,會給項目、公司帶來不可預知的後果。