Linq to SQL簡單分析
本文向大家介紹Linq to SQL,可能好多人還不了解Linq to SQL,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。
本系列的文章到現(xiàn)在為止都是在介紹查詢,難道Linq to SQL只能做查詢么?不能向數(shù)據(jù)庫添加數(shù)據(jù)?,肯定不是的:
- Table<Post> posts = dbContext.GetTable<Post>();
- //先實(shí)例化一個(gè)新的要插入的對(duì)象
- Post post = new Post();
- post.BlogId = 2;
- post.Title = "test";
- post.Body = "test,test,test,test";
- post.CreateDate = DateTime.Now;
- //調(diào)用Table的InsertOnSubmit方法
- posts.InsertOnSubmit(post);
- //把改變提交到數(shù)據(jù)庫,這個(gè)時(shí)候才真正執(zhí)行了
- dbContext.SubmitChanges();
- //提交修改后,你就可以查詢新插入的post的Id了
- Console.WriteLine(post.Id);
一個(gè)簡單的不能再簡單的insert into語句,加上一條返回新插入記錄的標(biāo)識(shí)值的語句。
如果你按照本文所說的一步步往下來,在執(zhí)行上面的插入的時(shí)候肯定會(huì)碰到異常,這是因?yàn)椋琁d對(duì)應(yīng)的數(shù)據(jù)表字段postid是該表的主鍵,你不應(yīng)該在插入的時(shí)候賦值,有人說我實(shí)例化對(duì)象的時(shí)候確實(shí)沒有給post的Id屬性賦值啊,但是.net會(huì)在后臺(tái)為我們將Id賦值為0,所以你要對(duì)映射對(duì)象做一下修改:
- [Column(Name="postid",IsPrimaryKey=true,IsDbGenerated=true)]
- public int Id { get; set; }
不僅僅數(shù)據(jù)表的主鍵要加這個(gè)屬性,如果對(duì)于那些在數(shù)據(jù)庫里設(shè)置了默認(rèn)值的,你并不像用程序插入的時(shí)候,你也得使用,比如這里的CreateDate。
可以插入肯定就可以更新了,下面就來看看如何更新呢:
做更新的時(shí)候,你首先得從數(shù)據(jù)庫查詢出該對(duì)象,然后對(duì)該對(duì)象的屬性進(jìn)行修改,最后更新到數(shù)據(jù)庫:
- var posts = from post in dbContext.GetTable<Post>()
- where post.BlogId == 2
- select post;
- foreach (var post in posts)
- post.BlogId = 5;
- dbContext.SubmitChanges();
Linq to SQL也會(huì)自動(dòng)的幫你生成Update語句了。
有了插入,更新,查詢就差一個(gè)Delete CURD就全了,對(duì)于delete更簡單了,你只要調(diào)用Table的DeleteOnSubmit方法就行了,這里就不再詳述。
這篇文章主要關(guān)注How Do I上面,對(duì)一個(gè)簡單的單表CURD做一個(gè)比較全面的介紹,下一篇會(huì)更深入一些,將會(huì)涉及到多表的連接,兩個(gè)表之間的關(guān)系怎樣反應(yīng)到映射上來,還將探討一下Linq to SQL中的延遲計(jì)算的問題。本篇定位為入門級(jí),只期望給一些初學(xué)者或者未接觸過Linq的朋友一些提示。
【編輯推薦】