LINQ to SQL系列Part 1 - Using LINQ to SQL


LINQ to SQL系列Part 1 - Using LINQ to SQL
本文转载自:
http://www.cnblogs.com/hanxianlong/archive/2007/11/16/960813.html

英文原贴链接:
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

本文同步发表在ScottGu的中文博客上
http://blog.joycode.com/scottgu/archive/2007/11/17/111496.aspx


What Is LINQ to SQL?

什么是LINQ to SQL? LINQ to SQL 是O/RM(对象关系映射)在.NET Framework“Orcas" release中的的一种实现,它允许你用.NET 的类来生成一个关系型的数据库。然后你可以用LINQ对从该对象中对数据库进行查询,更新/插入/删除。LINQ to SQL完全支持事务,视图和存储过程。它还提供了一种方便地在你的数据模型中对集合数据验证和业务逻辑规则的进行验证的方法。


LINQ to SQL 构造数据库:

VS "Orcas"中内置了一个提供了一种简单地将数据库可视化地转换为LINQ to SQL关系模型的设计器。我下一篇博客将会更深入一些来介绍怎么使用该设计器(你可以看这个我在1月份录制地关于如何使用它的录像)

通过LINQ to SQL设计器我可以方便地设计出如下的作为事例的"Northwind"数据库模型:

 


上图定义了四个实体类:Product, Category, Order and OrderDetail.  每个类的属性都映射到数据库中相应的表中。每个类的实例代表了数据表中的一行记录。

在上图中,四个实体类中的箭头代表了各个实体之间的关系。它们主要是根据数据库中的主键/外键关系生成的。设计器上的箭头的指向表明了该关系是一对一还是一对多的关系。基于此,强类型的属性将会被加入到此实体类中。例如,上边的Category类和Product类之间有一个“一对多”的关系。这意味着我可以有一个"Categories"属性,该属性代表了所有的在该类中的产品对象集合。Product类将会有一个"Category"属性来指向一个Category 类的实例,该Category类的实例表明了了产品所属的类别。

LINQ to SQL设计器的右侧是跟我们的数据库模型交互的存储过程。上边的例子中我添加了一个“GetProductsByCategory”存储过程。它有一个categoryID作为输入参数,返回一个产品序列。下面的事例代码将展示如何调用该存储过程。

了解DataContext类

当你点击LINQ to SQL设计器上的“save"按钮时,VS将会保存代表了我们的实体和数据库关系的类。对于每一个LINQ to SQL设计器加入到我们的解决方案的文件,也会生成一个自定义的DataContext类。

例如,下图就是基于我们上边设计的模型而生成的的NorthwindDataContext类:


LINQ to SQL 代码事例

用LINQ to SQL 设计器生成我们的数据库模型之后,我们就可以很方便地写代码对数据库进行操作。下边是一些展示了一些常用的数据库操作的代码:

1)从数据库中查询 出Products

下面的代码用LINQ to SQL 查询语法来查询Product对象序列。注意代码是如何通过Product/Category关系来仅查出那些类别是"Beverages"的产品:
C#:


 

VB:

2)更新数据库中的一条产品记录

下面的代码展示了如何从数据库中查询出单一的一条产品记录,更新它的价格,然后将更改保存至数据库:

C#:


 

VB:

注意:VB在"Orcas" Beta1中尚不支持lambdas。但是在Beta2中它就会支持了--那时代码就会能写得更为简洁一些。


3)向数据库中插入一条新的Category和两条新的Products

如下的代码展示了如何生成一个新的category,然后生成两条和该category相关联的产品,然后这三条记录被保存至数据库。
 

注意下边我如何不用手动地去维护主/外键关系,取而代之的是我只向categorys的"Products"集合中添加了两个Product记录,然后通过向DataContext的"Categories"集合中添加这个Category对象,LINQ to SQL将会知道自动是为我加上PK/FK的关系。
C#

 

VB:

 

4)从数据库中删除Products

下面的代码展示了如何从数据库中删除所有的玩具产品:

C#:

 

VB:

 

5)调用存储过程

下面的代码展示了如何不用LINQ的查询语法查询Product实体,而是通过调用我们向数据模型中添加的“GetProductsByCategory”存储过程。注意,一旦我查询出了Product结果集,我可以更新/删除它们,然后再调用 db.SubmitChanges()来将这些更新提交到数据库。

 C#:

  

VB:

  

 6)查询在服务器端分页的产品

下面的代码展示了如何实现作为LINQ语言一部分的高效地服务器端分页。通过用下面的Skip()和Take()操作符,我们从数据库中只查询出从200行开始的10条记录:

C#:

 

VB:

  

总结

LINQ to SQL提供了一种优秀、明了的方法来为你的应用程序来建立数据层。一旦你定义了数据模型,你就可以方便而且有效地对它进行查询,插入,更新和删除。

 希望以上的介绍和事例代码能够刺激你的胃口,让你学习到更多。在接下来的几周里我会在该系列中更具体地探索LINQ to SQL。

Scott

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值