LINQ学习笔记(七)
数据上下文
DataContext又称为数据上下文,它为LINQ to SQL提供操作数据库的入口。如果使用LINQ to SQL操作数据库,则首先需要为该数据库创建一个继承于DataContext类的自定义的数据上下文类,并在该类中定义表,以及操作数据的方法等。
7.1 DataContext概述
DataContext类是一个LINQ to SQL类,它充当SQL Server数据库与映射到该数据库的LINQ to SQL实体类之间的管道,它包含用于连接数据库以及才做数据库数据的连接字符串信息和方法。DataContext类能够通过数据库连接或连接字符串来映射数据库中的所有实体的源,并跟踪和标识用户对数据库的更改。
7.2 DataContext类的属性
(1) Connection连接属性:可以获取DataContext类的实例的连接(类型为DbConnection)
(2) Transaction属性:为DataContext类的实例设置访问数据库的事务。
其中,LINQ to SQL支持以下3种事务
. 显示事务:如果DataContext类的实例显示设置了Transaction属性的值,那么,DataContext类的实例调用SubmitChange()方法时将在同一个事务上进行
. 隐式事务:当DataContext类的实例SubmitChanges()方法时,LINQ to SQL会检查该方法是否在已经指定的事务内。如果不是,则LINQ to SQL将启动本地事务,并使用此事务执行所生成的SQL命令
. 显示可分发事务:DataContext类的实例可以再Transaction属性指定的事务内调用LINQ to SQL API,而不会创建新的事务
(3) CommandTimeOut属性:可以设置或获取DataContext类的实例的查询数据库操作的超时期限。该时间的单位为秒,默认值为30秒。
(4) ChangeConflicts属性:返回DataContext类的实例调用SubmitChanges()方法时导致并发冲突的对象的集合。如果要检测并发操作发生冲突,则在调用SubmitChanges()方法时需要设置报告冲突的方式。
(5) DeferredLoadingEnabled属性:是否延时加载关系
(6) LoadOptions属性:获取或设置DataContext类的实例的数据的立即加载和筛选的方式
(7) Log属性:实例的SQL查询或命令
7.3 DataContext类的方法
(1) DatabaseExists():检测指定的数据库是否存在
(2) CreateDatabase():在DataContext类的实例的连接字符串指定的服务器上创建
数据库
(3) DeleteDatabase():删除DataContext类的实例的连接字符串标识的数据库
(4) ExecuteCommand():执行指定的SQL 语句,通过该SQL语句来操作数据库
(5) ExecuteQuery():可以执行指定的SQL语句,并通过SQL语句检索数据
(6) SubmitChanges():计算要插入、更新或删除的已修改对象的集,并执行相应的修改提交到数据库。
(7) 获取命令信息的GetCommand():能够获取指定查询的执行命令的信息。
(8) 获取表集合的GetTable():能够获取DataContext类的实例的表的集合
(9) GetChangeSet():获取被修改的对象,它返回由3个只读集合(Inserts、Deletes和Updates)组成的对象。
(10) Translate():能够将DbDataReader对象的数据转换为数据类型为IEnumerable<Tresult>或IMultipleResults或IEnumerable的新对象。其中,DbDataReader对象中的每一行记录将被转换为数据类型为IEnumerable<TResult>或IEnumerable中的每一个元素
(11) Refresh():能够刷新对象的状态,刷新的模式由RefreshMode枚举的值确定。