上一篇文章:
在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 1)
在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 2)
LINQ to SQL
LINQ to SQL 提供了访问数据库的方法,且允许我们做所有数据库相关的操作,如查询、插入、更新和删除。LINQ to SQL消除了写存储过程和从数据访问层调用的过程,它可以在运行的时候自动生成合适的SQL脚本来进行数据库操作。在Visual studio中,你可以通过使用Add New Item 增加LINQ to SQL文件到项目中。下图1.4是Northwind数据库在Object Relational Designer 中的显示(
EntLib.com 开源小组注:原文采用SampleDB数据库,这里我们采用Northwind 范例数据库)。当保存该文件时,LINQ to SQL自动创建一个CS文件或VB文件 – 用来访问数据库的DataContext类,还为设计器中的表创建一些必要的实体类。在设计器中的每一个表均有一个对应的实体类。
设计器中的表包含所有的数据库属性,包括表关系。设计器中的箭头标识表示数据库表的主键/外键关系。
EntLib.com 开源小组注:这里我们创建C# 项目,而不是原文采用的VB项目,因此后续的示例代码全部为C#,原文为VB代码。
DataContext
类
Solution 中的每一个LINQ to SQL设计器将自动创建一个DataContext类,用来查询数据库、检索数据记录和更新数据库操作的主要类,它包含了每一个表的属性。
实体类
LINQ to SQL为添加到设计器(.dbml文件)中的每一个表创建对应的实体类,这些实体类包含了强类型属性集合,映射到数据库中对应表的字段。LINQ to SQL使用这些实体类来生成数据操作的SQL脚本,同时,我们也可以创建实体类的实例,给实例赋值,然后在不同的层之间作为数据传输对象进行传递。(
EntLib.com 开源小组注:这些实体类并不适合在WCF Service与Client 作为DTO传递,因为WCF对传输的实体类有特殊的attribute要求。对WCF Data Contract的要求,请您参加相关的文档。)
映射
Mapping
DataContext类中的实体类和属性直接映射到对应数据表和字段。缺省情况下,在DataContext类中,LINQ使用继承抽象类MappingSource的AttributedMappingSource类来存放表和字段的映射信息,从数据库中检索记录和提交数据更新到数据库时需要这些映射信息。
重新生成
DataContext
类
当数据库表设计发生变化时,必须更新DataContext类。我们建议在任何修改/更新数据表时,重新生成整个DataContext类。首先,删除DataContext 类文件(C# / VB文件);然后保存该文件,并自动DataContext类。或者你右键点击.dbml文件,找到Run Custom Tool 选项,然后点击重新生成DataContext类文件。
创建
Data Linq
层
下图1.2显示Data Linq层,包含了DataContext类和实体类。这些类对应的代码文件由Visual studio自动生成。
![](https://i-blog.csdnimg.cn/blog_migrate/5de0a2eace83525f6d7266e5b123f06f.png)
图
1.2
:
Data Linq
层
–
详细视图
在
solution
中增加一个类库
Class Library
项目,然后增加
LINQ to SQL
到项目中。下图是
Visual Studio 2008
增加一个新的
LINQ to SQL
的截屏,并在窗口中选择
LINQ to SQL
选项。
![](https://i-blog.csdnimg.cn/blog_migrate/e8a7a3cd803d5850d74d1042561ce486.png)
图1.3: 增加LINQ to SQL类
增加LINQ to SQL到项目中,将自动创建一个空白的设计器(.dbml文件),并附有server explorer的链接,同时也创建相关的dbml.layout文件(XML文件)和designer.cs文件(DataContext类文件 –
http://www.EntLib.com 开源小组注:原文为VB文件)。打开server explorer,并建立到数据库的链接,然后导航到合适的数据库和表,接着拖放相关的表到设计器表面。最后,保存文件。现在,已经自动生成了包含相关的属性、方法的DataContext类和实体类。
为了演示的需要,我将使用Northwind 范例数据库(
http://www.EntLib.com 开源小组注:原文采用自定义的sample数据库)。根据如下表结构,我们可以了解如何创建CURD操作层。如下图1.4显示含有这些表的dbml文件:
![](https://i-blog.csdnimg.cn/blog_migrate/30666613b01c0c270190e1a3ef7d94f0.png)
图1.4:LINQ to SQL设计器 - .dbml文件
下图1.5 是DataContext类和实体类的Class Diagram:
![](https://i-blog.csdnimg.cn/blog_migrate/674e7ff52bb43e9f5b61c0a5e6c25612.png)
图1.5:Data LINQ – Class Diagram
注:DataContext 类自动负责打开数据库连接,执行数据操作和关闭连接。
EntLib.com 开源小组注:本文翻译《
Building Multi-Tier Web Application in .NET 3.5 Framework Using LINQ to SQL》。后面内容待续。欢迎交流LINQ相关技术。