越來越多的朋友喜歡用Linq to Sql來進行開發項目了,一般我們都會遇到CRUD等操作,不可否認,在查詢方面Linq真的帶來很大的便利,性能方面也表現不錯,在插入操作和刪除操作中,Linq的表現也還不錯,但是在更新某條記錄的時候,性能就相對比較弱了,我們一般會使用ExecuteSql等方法來執行腳本。本文將談到這些容易被忽略的問題。
有時候,我們還是會使用Linq to Sql來進行LINQ更新數據Update,執行的步驟:獲取一個記錄-〉更新字段 -〉submitChanges()
昨天遇到了一個問題,流程都沒有錯,但是LINQ更新數據的時候始終沒有更新到數據庫,
大概得偽代碼如下:
- 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 ,或許你會覺得這誰不知道啊,但是往往我們真的會忽略這一點,記得以前考試,往往都是難的題目基本上全對,但越簡單越容易的題目,卻會經常犯錯,希望這些能對你有些啟發。
好了,知道了為什么出錯,修改也簡單了,兩種方法:
LINQ更新數據方法一:
- public void UpdateUser(User user)
- {
- DataContext context = new DataContext("conn");
-
- //從當前context取
- User existsUser = context.Users.SingleOrDefault(e => e.ID.Equals(user.ID);
- existsUser.Name = user.Name;
- //.............
-
- context.SubmitChanges();
- }
LINQ更新數據方法二:- //把context設成上下文公用的
- DataContext context = new DataContext("conn");
-
- public void UpdateUser(User user)
- {
-
- User existsUser = GetUser(user.ID);
- existsUser.Name = user.Name;
- //.............
-
- context.SubmitChanges();
- }
|
好了,文章比較簡單,也或許你覺得不值得一提,目的也不是為了解決這個問題,希望大家能在做項目中,一定要仔細,因為往往你的一個小小的疏忽,會給項目、公司帶來不可預知的后果。
【編輯推薦】
- LINQ查詢表達式中的復合from子句
- 使用LINQ查詢泛型字典Dictionary
- 淺談LINQ to SQL集成數據庫語言優劣
- 淺談如何在ASP.NET中了解LINQ語句性能
- 淺談LINQ如何插入刪除和更新數據庫記錄備注