【极客营】LINQ进阶篇—LINQ To SQL

系列课程视频地址:https://ke.qq.com/course/267924?flowToken=1006068

LINQ To SQL通过LINQ对象模型直接与数据库进行数据交互,比如查询、修改等操作。

在LINQ To DataSet中,只是在DataSet层次对数据提供LINQ查询支持,可以说LINQ和ADO.Net是一种合作关系,然而,在LINQ To SQL中,将LINQ和ADO.Net集成得更加紧密,它将关系数据库模型映射到开发人员所有的编程语言(如C#等)所表示的对象模型。

LINQ To SQL是ADO.Net系列技术的一部分,它基于由ADO.Net提供程序模型提供的服务,因此开发人员可以将LINQ To SQL与现在的ADO.Net应用程序混合使用。

LINQ To SQL架构在ADO.Net之上。它通过ADO.Net进行数据库操作,同时通过LINQ To SQL提供程序实现对象模型和关系数据库模型之间的转换,另外,对象关系模型是LINQ To SQL的核心部分,它提供数据库和对象模型之间的映射关系。

LINQ To SQL查询所用的语法与在LINQ中使用的语法相同,不同的是,查询中引用的对象被映射到数据库中的元素,在应用程序执行期间,通过LINQ To SQL来请求LINQ查询执行。LINQ To SQL支持程序随后将LINQ查询转换成等效的SQL命令,并委托ADO.Net提供程序执行数据库操作。ADO.Net提供程序将查询结果作为DataReader/DataSet返回,然后LINQ To SQL提供程序将ADO.Net结果转换成用户对象IQueryable集合,并对IQueryable集合进行查询,返回查询结果。

IQueryable<T>接口是LINQ To SQL中使用到的主要接口,它从IEnumerable<T>继承而来,表示一个可以查询的数据集合,可以通过LINQ对其进行查询,IQueryable<T>成员的用法与IEnumerable<T>相同。

1、对象模型原理及O/R设计器构成

在LINQ To SQL中,将编程语言表示的对象模型映射到关系数据库的数据模型,开发人员按照对象模型来执行对数据的操作,从而实现对数据库的操作,数据库访问变得更加快捷高效。

在LINQ To SQL中,开发人员不用向数据库发出SQL命令(例如:select、insert、update、delete等),而是在对象模型中直接更改值或执行方法,当开发人员能过对象模型执行操作时,LINQ To SQL将请求转换成正确的SQL命令,然后将这些命令发送到数据库,得到返回数据库服务器的操作结果后,再将这些结果传递到对象模型。

LINQ To SQL对象模型原理图如下:

 

LINQ To SQL包括两个主要组件,即对象模型(Object Model)和运行接口(Runtime),前者为开发人员提供容易基于编程语言的对象访问模式和开发接口,后者为对象模型和数据库管理系统(DBMS)之间提供映射功能,将二者关联到一起。

由于对象模型和关系型数据库中每个元素之间有一种一对一的映射关系,开发人员才能通过对象模型访问数据库,对象模型和关系数据库映射关系如下:

对象模型

关系型数据库模型

对象模型

关系型数据库模型

实体类

关联

外键关系

类成员

方法

存储过程或函数

其中,数据库中表(Table)被映射到C#类,数据库表中的列(字段)被映射到C#类的成员(属性),

数据库中的存储过程或函数映射为C#类中的方法等。

通常,开发人员可以通过下面3种方法创建对象模型:

对象关系设计器:又名O/R设计器,就VS2012集成开发环境提供的一个工具,它为开发人员提供用于从现在数据库创建对象模型的丰富用户界面,最适合小型或中型数据库。

SQLMetal代码生成工具,是一个实用的命令行工具,和 O/R设计器十分相似,比较灵活,不过没有界面,该工具适合对大型数据库进行建模。

代码编程器:可以通过VS工具或其他编辑器直接编写对象模型的代码,该方法编码量大,易出错。

基于三种方法各自的优缺点,通常在实际开发中首先使用O/R设计器生成对象模型,然后通过编辑器根据需要对对象模型进行改进或修改。

为了实现关系数据库模型到对象模型的转化,VS为此提供一个专门的可视化设计器—对象关系设计器(O/R设计器)。

O/R设计器提供可视化设计界面,用于创建基于数据库中对象LINQ To SQL实体类和关联。它生成一个DataContext对象,用于在实体类和数据库之间发送和接收数据。另外,O/R设计器提供了对实体类之间的继承关系进行设计的能力。O/R设计器只能在已有数据库之上进行操作转化。

准备数据库:

打开VS2012开发环境,选择新建项目如图:

在解决方案资源管理器中右键:添加新建项—选择LINQ To SQL类—命名Students.dbml

添加LINQ To SQL类之后:默认情况下,打开的O/R设计器不包括任何内容如下图:

从“服务资源管理器”的”数据连接”中,将Stu数据库中的表Students和Scores添加到O/R设计器,如下图所示:

在Student.dbml文下可以看到:

注意:如果Stu数据库没有出现在服务器资源管理器”中,要先通过”数据连接”添加Stu数据库。

从中可以看出,VS自动生成将数据库的表映射到对象模型中的类,将表中的列映射到类的属性。

LINQ To SQL类Students.dbml的代码结构如下图:

以上文本皆为自动生成

DBML文件(Students.dbml):在VS中,右击dbml文件,在弹出的快捷菜单中选择”打开方式”命令,在列表中选择”XML编辑器”,可以查看dbml文件的详细内容,直接双击打开的是O/R设计器,该文件本质是一个XML文件,通过DB数据库元素描述关系模型中的数据库的表、字段、链接字符串、对象模型中的类等信息。

Layout文件:该文件的本质也是XML文件,它记录当前LINQ To SQL类在O/R设计器中的布局等显示信息。

设计代码文件(.designer.cs):该文件是C#代码文件,它包含O/R设计器自动生成的类文件。除了每个数据表对应的类,还包括一个从System.Data.Linq.DataContext继承的类,用来实现对象模型和关系模型之间数据的传输。

用户实现代码(Students.cs):该代码只在开发人员对数据表对应的类添加了自定实现之后才会产生,它为开发人员提供一种有效的扩展LINQ To SQL的方式。 

LINQ To SQL是通过DataContext类实现对象和数据库之间的数据交换,这个类保存在由O/R设计器自动生成的.designer文件中,StudentsDataContext继承自DataContext,负责与数据库的数据交换包括两个主要只读属性Students和Scores,Students属性对应数据库中的Students表,Scores属性对应数据库的Scores表。

简单的将DataContent类理解成数据表的集合,它主要封装了多个数据表的数据读取操作,之所以不把它看成数据库,是因为它通常只包含一个或多个相互关联的数据库表,通常不包括整个数据库中所有的表。

在创建了LINQ To SQL类之后,就可以轻松通过这些类浏览数据。

2、O/R设计器浏览数据库记录

在创建了LINQ To SQL类之后,就可以轻松通过这些类浏览数据。

步聚一:

创建Windows窗体应用程序UserORdesigner

步聚二:

通过选择”数据”|”显示数据源”命令打开”数据源”对话框,或者shift+alt+d也可以打开数据源,通过选择添加”新的数据源”选项,在弹出的”数据源配置向导”对话框,给出多种可以选择的数据源,这里选择 “对象”。

步聚三:

从选项中选择要作为数据源的类对象,本例中要浏览学生信息,所以此处选择Students类,最后点击完成。得到数据源窗体中效果如下图:

从图可以看出包括Students表中的所有字段,在窗体中Students类的右边有一个下拉列表框,用于指定该类在绑定时数据显示格式,包括DataGridView和详细信息两种,Students选择DataGridView显示格式。

步聚四:

从数据源窗体中将Students对象拖动到windows窗体中,会自动生成一个DataGridView表格和导航栏,这里通表格的列编辑功能将Scores移除,然后再将Scores以详细信息形式拖放到windows窗体的右边,会自动生成Scores各字段的详细信息。

最终效果:

步聚五:

最后一步将数据加载到界面,此时需要DataContext类对象。在窗体的加载事件中代码如下:

接下来就可以用LINQ查询SQL类了

3、用LINQ查询LINQ To SQL类

LINQ To SQL类同样可以与LINQ查询绑定,从而实现高效快速的数据记录查询操作,并编写功能强大,而普通的SQL查询无法实现数据查询功能,要用LINQ通过LINQ To SQL类查询数据库数据,通常包括以下4个步聚。

(1) 在已有数据库的基础上,为项目添加LINQ To SQL对象模型。

(2) 根据对象模型,获取对应的DataContext类,该类是应用程序和数据之间的桥梁,它提供数据库的查询、提交修改等操作。

(3) 通过DataConext对象获取对应的数据源,根据对象模型不同,数据源保存的属性也不同。

(4) 编写LINQ查询,对数据源进行查询。

例题:

创建一个控制台应用程序,首先添加一个LINQ To SQL类Students类,在服务资源管理器中选中Students表和Scores表拖动到区域作为数据源。

注意:LINQ To SQL类中包含一个代码文件.cs,开发人员可以在该文件中对每个类添加自己需要的实现,然后在LINQ查询中使用,从而大大增加查询功能。

完整内容请移步至视频:https://ke.qq.com/course/267924?flowToken=1006068

猜你喜欢

转载自blog.csdn.net/geek_nanji/article/details/79402024