欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Linq更新數(shù)據(jù)實(shí)用嗎

本篇內(nèi)容主要講解“Linq更新數(shù)據(jù)實(shí)用嗎”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Linq更新數(shù)據(jù)實(shí)用嗎”吧!

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供南華企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為南華眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

WEB 2.0的網(wǎng)站少不了數(shù)據(jù)庫(kù)、數(shù)據(jù)訪問,也是一切操作之本,而VS 2008中***的亮點(diǎn)之一Linq也恰巧是做這個(gè)的,所以我的開發(fā)從Linq、從數(shù)據(jù)庫(kù)開始。網(wǎng)上關(guān)于Linq的教學(xué)鋪天蓋地,我不準(zhǔn)備重復(fù),我只寫下我遇到的問題。Linq更新數(shù)據(jù)怎么就那么費(fèi)勁?

Linq的全稱是Language Integrated Query ,也就是說Linq是以一個(gè)查詢語言的方式出現(xiàn)在我們面前的。在查詢方面Linq做了不少的優(yōu)化,我們不用在費(fèi)盡心思去拼裝SQL語句、組裝實(shí)體等,所有操作在Linq里都是強(qiáng)類型的,我們用C#代碼輕松地寫出漂亮的SQL語句。

那么做為一個(gè)查詢語言,Linq更新數(shù)據(jù)方面又是怎么表現(xiàn)的呢?通常來說Linq的更新會(huì)以以下的方式出現(xiàn)(絕大部分教程中都是這么寫的)

var ctx = new MyDataContext();  var user = ctx.Users.Where(u => u.UserId == userId).Single();  user.UserName = "New User Name";  ctx.SubmitChanges();

這些是C#代碼,但是背后做了什么呢?Linq會(huì)為我們生成類似一下的SQL語句

第一步,查詢

SELECT UserId, UserName, FirstName, LastName, CreatTime From User WHERE UserId = @userId

第二部,更新

UPDATE User SET UserName = @newUserName  WHERE UserId = @oldUserId, userName = @oldUserName, FirstName = @oldFirstName, LastName = @oldLastName

發(fā)現(xiàn)了什么?首先Linq會(huì)取出所有的字段,在user.UserName = "New User Name"的時(shí)候,記錄下UserName字段被更新過了,UPDATE時(shí)會(huì)只更新UserName,但是把之前所有字段的值放在WHERE語句里來做為條件。

Are you kidding?! 這樣的效率實(shí)在是太差了吧?!

拋開效率問題,接下來我們看另外一種更新數(shù)據(jù),有個(gè)某個(gè)字段記錄頁面被訪問的次數(shù),平時(shí)我們會(huì)用

UPDATE POST SET Views = Views + 1 WHERE PostId = @PostId

但是如果我們寫下如下C#代碼

var ctx = MyDataContext();  var post = ctx.Posts.Where(p => p.PostId = @postId).Single();  post.Views++  ctx.SubmitChanges();

Linq更新數(shù)據(jù)會(huì)怎么做呢?和上面一樣!取出所有字段,把View加一,用所有字段做為條件(包括Views),更新回去。

設(shè)想一下,這樣一個(gè)被頻繁使用的計(jì)數(shù)器,兩次操作出現(xiàn)SELECT與UPDATE交叉情況的可能性很大,那么后者還能更新成功么?

微軟就是這樣解釋的,如果在你Linq更新數(shù)據(jù)中,有其他人更新了這一行,那么這一行也就不是你所需要的那一行了,為了防止這樣的沖突,所以把所有字段都放在WHERE語句中,這是by design的。

你可以通過其他方法進(jìn)行更新數(shù)據(jù),然而在目前版本,這個(gè)方法也表現(xiàn)的不怎么樣。

System.Data.Linq.Table有一個(gè)Attach方法,帶有三個(gè)重載,用來直接更新數(shù)據(jù)的,我們來一個(gè)一個(gè)的來看看。

Attach(T entity)  var ctx = new MyDataContext();  var newUser = new User();  newUser.UserId = new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");//假設(shè)作為參數(shù)傳進(jìn)來的  newUser.UserName = "New User Name";  ctx.Users.Attach(newUser);  ctx.SubmitChanges();   //結(jié)束

運(yùn)行完全沒有任何效果,SQL Profiler無任何記錄。

Attach(T entity, T original)  var ctx = new MyDataContext();  var newUser = new User();  newUser.UserId = new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");//假設(shè)作為參數(shù)傳進(jìn)來的  newUser.UserName = "New User Name";  var user = ctx.User.Where(u => u.UserId = newUser.UserId).Single();  ctx.Users.Attach(newUser, user);  ctx.SubmitChanges();    //結(jié)束

運(yùn)行時(shí)提示: Cannot add an entity with a key that is already in use.

Attch(T entity, bool asmodified)  var ctx = new MyDataContext();  var newUser = new User();  newUser.UserId = new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");//假設(shè)作為參數(shù)傳進(jìn)來的  newUser.UserName = "New User Name";  ctx.Users.Attach(newUser, true);  ctx.SubmitChanges();    //結(jié)束

運(yùn)行時(shí)提示:An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy.

怎么辦?提示中說"declares a version member ",通常來說是指SQL SERVER中TimeStamp類型的字段,在你所需要更新的表中加上一個(gè)字段,并標(biāo)記為TimeStamp就可以了。但是這樣做,對(duì)于我們來說仍然是個(gè)浪費(fèi),并且WHERE語句中仍然會(huì)出現(xiàn)TimeStamp的限制。

你還可以通過在字段上設(shè)置UpdateCheck.Never屬性來避免更新檢查,但是如果數(shù)據(jù)表更新、新增存儲(chǔ)過程,需要重新生成dbml的話,你需要手動(dòng)重新設(shè)置一遍。

Linq更新數(shù)據(jù)甚至沒有一個(gè)類似Web引用中Update Web Reference的操作來讓你方便的在數(shù)據(jù)表更新后更新dbml,并且在這個(gè)版本都不會(huì)提供,你所能做的只有刪除原來的表,刷新Server Exploer,重新拖拽到dbml的設(shè)計(jì)視圖中,或者,寫個(gè)腳本,讓SQLMETAL來幫你完成這些。

到此,相信大家對(duì)“Linq更新數(shù)據(jù)實(shí)用嗎”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站題目:Linq更新數(shù)據(jù)實(shí)用嗎
鏈接URL:http://aaarwkj.com/article44/jpoghe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、網(wǎng)站排名、標(biāo)簽優(yōu)化、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
精品成人乱色一区二区| 一区三区精品久久久精品| 91日本精品一区二区| 国产欧美日韩91成人| 日韩人妻熟妇中文字幕| 亚洲精品成人午夜av| 四虎精品在线免费视频| 日本成人精品二区在线观看| 亚洲丰满熟女乱一区二区三区| 亚洲 精品一区二区| 少妇高潮时会抱紧男人脖子| 久久夜色一区二区三区| 国产精品不卡一不卡二| 国语对白刺激真实精品| 亚洲精品日韩av专区| 久久精品亚洲天然东京热| 男女性情视频免费大全网站| 中文字幕你懂的在线观看| 日本女优高清不卡一二三四区| 国产传媒视频在线免费观看| 日本束缚人妻一区二区三区| 欧美成人夫妻性生活视频| 日韩欧美亚洲综合久久精品| 中文字幕不卡在线观看不卡| 亚洲欧美国产另类精品| 久久综合婷婷亚洲五月| 少妇高潮毛片免费看高潮| 亚洲一区二区三区在线播| 97精品免费视频观看| 亚洲无人区码一码二码三码| 亚洲国产免费一区二区| av免费观看一区二区三区| 好吊视频在线免费观看| 闫国产一区二区三区色噜噜| 亚洲欧美日韩制服另类| 国产精品亚洲av在线| 少妇的诱惑免费在线看| 日本东京一区二区三区| 国产精品一区二区三区 在线| av黄色在线播放网页| 国产成人亚洲精品在线看|