LINQ to SQL快速上手 step by step

LINQ to SQL快速上手 step by step

前言

最近接连遇到几个朋友问我同一个问题,就是关于.NET平台上ORM框架的选择。我想在这个讲求效率的时代,谁也不想手写SQL或存储过程去访问数据库了。大家都知道,在Java平台上,ORM这一块基本是Hibernate的天下。当然,相对轻量级的iBatis也有不错的表现。

不过谈到.NET平台,ORM框架似乎相对混乱了点。很多朋友问我的时候,往往会这样问:NHibernate、NBear和Castle该选择哪个?而当我反问:为什么不适用微软自带的Linq to Sql呢?对方经常会迷茫和不解。

我觉得这是个很奇怪的现象。依照我个人的实践,我认为当需要快速构建一个中小型项目时,Linq to Sql是一个很好的选择。你至少有以下理由可以选择它: i. 它是微软自己的产品,和.NET平台有着天生的适应性。如果你使用.NET Framework3.5和VS2008开发环境,它本身就集成在里面了,同时VS2008对于Linq to Sql给予了诸多方便的支持。使用它,你不仅在开发和部署时不用考虑第三方库,更可以尽情享受VS2008带来的种种方便。

ii. 上手十分容易,使用十分轻松,通常,你不需要编写一行代码,也不用写任何XML配置,完全通过可视化拖拽就能完成ORM层的构建。

iii. 功能丰富,使用便捷。当轻松构建好ORM层后,你就可以更轻松的操纵数据库了。Linq to Sql提供了丰富的功能,完全可以满足日常数据访问的需求。使用方法也非常简单、灵活。

有这么好的理由,我真想不通为什么那么多人不愿去选择它。我想来想去,也许有两个重要原因,一是把LINQ和Linq to Sql混为一谈了,二是受前段时间“LINQ已死”的误导,觉得微软已经抛弃Linq to Sql了。关于这两点,我就不细说了,简略澄清一下:

首先,LINQ是从.NET Framework3.0开始,.NET平台上引入的一种新式语言特性,狭义一点,你可以讲它理解成一种新式语法,主要是针对迭代数据操作的,所以,也许LINQ叫做“数据迭代引擎(Data Iterative Engine)”更合适,之所以不着样命名,我想微软可能不愿意让自己产品的简写为“DIE”吧。:-)而Linq to Sql是LINQ在数据库访问方面的一个应用框架,完全是两码事。

其次,关于微软会不会放弃Linq to Sql,客观说,可能会,因为微软下一步主推的ORM解决方案是Entity Framework。不过这并不妨碍你学习使用Linq to Sql,原因如下:第一,考虑到兼容性问题,微软绝对不会把Linq to Sql从.NET Framework中拿掉的,所以你不用怕现在用Linq to Sql写的程序以后不能运行了。第二,即使微软不更新Linq to Sql了,但它现在的功能,已经足够满足我们日常需要了,相比重量级的Entity Framework,如果你只是做一个中小型项目,并且很注重开发效率和学习曲线,为什么不选择可爱的Linq to Sql呢? 好的,上面废话说了不少,下面正式开始吧。本文不是一篇关于Linq to Sql的大百科,写本文的目的,是引导大家快速上手Linq to Sql,所以不可能面面俱到去讲解Linq to Sql。不过根据80-20定律,学会了本文的内容,基本就可以应付80%的工作了。另外,延续我一贯的风格,本文将通过案例的方式帮大家上手Linq to Sql。案例是一个“公告发布程序”。下面我们开始!

Step1:建立数据库

在使用Linq to Sql前,我们要将相应的数据库建好。在这个Demo中,使用的数据库是SQL Server Express 2005。

我们首先建立一个叫的数据库MyBulletin,及两个数据表:Category和Bulletin,分别表示公告的分类和公告,建立方法不再赘述。至于两个表的具体字段请参看图1。

图1、数据表结构

其中Category和Bulletin存在一个一对多的关联,表示一个分类下可以有多条公告。

Step2:建立LINQ to SQL Classes文件

数据建好后,我们需要建立LINQ to SQL Classes文件。这种文件是Linq to Sql框架的主要文件,后面自动生成的实体类和ORM代码都存在于这个文件中。 我们打开VS2008,新建一个C# Class Labrary工程,名称为

LinqToSqlDemo.Orm,建好后在工程上单击右键,选择“Add”->“New Item”,在文件类型中选择“LINQ to SQL Classes”,文件名命名为“DataClasses.dbml”,如图2所示。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4