日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

linq to sql 插入值,以及如何取回自增的ID

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linq to sql 插入值,以及如何取回自增的ID 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

linq to sql 在插入值的時候還是很方便。有時候我們需要在插入一個新的實體之后得到那個實體的主鍵ID的值,這個ID當(dāng)然必須是自增。一段時間我一直認(rèn)為直接使用linq to sql的插入機制是不可以在做到的,所以只有使用存儲過程的,具體可以查看這篇文章:http://blog.benhall.me.uk/2008/01/custom-insert-logic-with-linq-to-sql.html,但是總是覺得這樣太麻煩了。通過觀察linq to sql插入之后產(chǎn)生的sql發(fā)現(xiàn),它自動生成了兩條語句,一條insert,一條select,而且那條select正好就是查詢的最后生成的主鍵ID,真是不可思議呀。。

下面以一個實際的代碼演示一下:

1.新建一個新聞表:

列名???????????? 數(shù)據(jù)類型??????????????????????? 允許為NULL???????? 默認(rèn)值???????????? 主鍵
----------------------------------------------------------------------------
ID??????????????? ?int?????????????????????????????????????????????????????? 自增??????????????? 是
Title????????????? nvarchar(200)???????????????????????????????????
PubDate??????? datetime????????????????????????????????????????????? getdate()?????
Tag?????????????? nvarchar(200)?????????????????是?????????????????

2.通常的做法就是新建一個Linq to sql 的類文件,然后通過可視化設(shè)計器把數(shù)據(jù)表拖到設(shè)計器中,但是這樣一"托"永逸的做法是根本不行的,還要需要修改一些地

方,數(shù)據(jù)庫中默認(rèn)值的字段除了主鍵在自動生成的linq to sql的類文件中所對應(yīng)的屬性上面的列特性是沒有標(biāo)記IsDbGenerated=true的,這一點是必須要修改的。

在本例中要修改的就是在Pubdate屬性把IsDbGenerated=true添加上,當(dāng)然也可以在可視化的方式修改:

3.下面就來測試linq to sql 中插入值所產(chǎn)生的sql語句:

?

????????????using?(DemoDataContext?db?=?new?DemoDataContext())
????????????{
????????????????db.Log?
=?new?WebApp.DataServer.DebuggerWriter();
????????????????News?news?
=?new?News?{?Title?=?"測試"?};
????????????????db.News.InsertOnSubmit(news);
????????????????db.SubmitChanges();
????????????}

?

對應(yīng)產(chǎn)生的sql語句:

看的很清楚一條insert ,一條select?? ,注意select中的字段正式設(shè)置了默認(rèn)生成的字段。如果我們不想讓設(shè)置了默認(rèn)值的字段不出現(xiàn)在select語句中我們可以那那個屬性上的Column特性上設(shè)置AutoSync=AutoSync.Never,比如我們在本例中的Pubdate字段的屬性上設(shè)置AutoSync=AutoSync.Never,則生成的語句的select字段中就不會出現(xiàn)Pubdate:

4.解決問題:

linq to sql?? 在插入值的時候會"無緣無故"的時候會產(chǎn)生select語句,真的很神奇,這個select并不是沒有用的,從select的意思我們可以看出他正好查詢了我們想要的字段的值,但是怎么得到他們呢,明明查詢了,現(xiàn)在有什么辦法可以得到呢?其實很簡單:

?

?using?(DemoDataContext?db?=?new?DemoDataContext())
????????????{
????????????????db.Log?
=?new?WebApp.DataServer.DebuggerWriter();
????????????????News?news?
=?new?News?{?Title?=?"測試"?};
????????????????db.News.InsertOnSubmit(news);
????????????????db.SubmitChanges();
????????????????
int?newsID?=?news.ID;
????????????}

?

就是在提交之后訪問那個剛剛插入的實體的ID屬性就可以了。

5.下面我們測試一下,如果批量添加能不能得到那些自增的ID?

代碼:

????????????using?(DemoDataContext?db?=?new?DemoDataContext())
????????????{
????????????????db.Log?
=?new?WebApp.DataServer.DebuggerWriter();
????????????????var?newsList?
=?new?List<News>
????????????????{
?????????????????????
new?News{Title="測試1"},
?????????????????????
new?News{Title="測試2"},
?????????????????????
new?News{Title="測試3"},
????????????????};
????????????????db.News.InsertAllOnSubmit(newsList);
????????????????db.SubmitChanges();
????????????????var?IDList?
=?newsList.Select(n?=>?n.ID);
????????????}

? 下面是生成的Sql語句:

下面是監(jiān)視IDList的結(jié)果,真是每個新插入數(shù)據(jù)的ID值:

6.linq to sql還是強大,只是資料太少了,想把linq to sql 搞很明白還是很困難。

轉(zhuǎn)載于:https://www.cnblogs.com/dushouke/archive/2009/06/29/linq-to-sql-retake-Identity-value.html

總結(jié)

以上是生活随笔為你收集整理的linq to sql 插入值,以及如何取回自增的ID的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。