本文向大家介绍Linq to SQL,可能好多人还不了解Linq to SQL,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。
本系列的文章到现在为止都是在介绍查询,难道Linq to SQL只能做查询么?不能向数据库添加数据?,肯定不是的:
- Table<Post> posts = dbContext.GetTable<Post>();
- //先实例化一个新的要插入的对象
- Post post = new Post();
- post.BlogId = 2;
- post.Title = "test";
- post.Body = "test,test,test,test";
- post.CreateDate = DateTime.Now;
- //调用Table的InsertOnSubmit方法
- posts.InsertOnSubmit(post);
- //把改变提交到数据库,这个时候才真正执行了
- dbContext.SubmitChanges();
- //提交修改后,你就可以查询新插入的post的Id了
- Console.WriteLine(post.Id);
一个简单的不能再简单的insert into语句,加上一条返回新插入记录的标识值的语句。
如果你按照本文所说的一步步往下来,在执行上面的插入的时候肯定会碰到异常,这是因为,Id对应的数据表字段postid是该表的主键,你不应该在插入的时候赋值,有人说我实例化对象的时候确实没有给post的Id属性赋值啊,但是.net会在后台为我们将Id赋值为0,所以你要对映射对象做一下修改:
- [Column(Name="postid",IsPrimaryKey=true,IsDbGenerated=true)]
- public int Id { get; set; }
不仅仅数据表的主键要加这个属性,如果对于那些在数据库里设置了默认值的,你并不像用程序插入的时候,你也得使用,比如这里的CreateDate。
可以插入肯定就可以更新了,下面就来看看如何更新呢:
做更新的时候,你首先得从数据库查询出该对象,然后对该对象的属性进行修改,最后更新到数据库:
- 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也会自动的帮你生成Update语句了。
有了插入,更新,查询就差一个Delete CURD就全了,对于delete更简单了,你只要调用Table的DeleteOnSubmit方法就行了,这里就不再详述。
这篇文章主要关注How Do I上面,对一个简单的单表CURD做一个比较全面的介绍,下一篇会更深入一些,将会涉及到多表的连接,两个表之间的关系怎样反应到映射上来,还将探讨一下Linq to SQL中的延迟计算的问题。本篇定位为入门级,只期望给一些初学者或者未接触过Linq的朋友一些提示。
【编辑推荐】