DataContext又称为数据上下文,它为LINQ to SQL提供操作数据库的入口。如果要使用LINQ to SQL操作数据库,首先需要为该数据库创建一个继承自DataContext类的自定义的数据上下类,并在该类中定义表,以及操作数据的方法等。
DataContext类的属性
- 连接属性Connection
Connection属性可以获取DataContext类的实例的连接(类型为DbConnection)。
- 事务属性Transaction
其中,LINQ to SQL支持以下3种事务:
- 显示事务。如果DataContext类的实例显式设置了Transaction属性的值。那么DataContext类的实例调用SubmitChanges()方法是将在同一个事物上进行。
- 隐式事务。当DataContext类的实例调动SubmitChanges()方法时,LINQ to SQL会检查是否在已经指定的事务内,如果不是,则LINQ to SQL将启动本地事务,并将此事务执行所生成的SQL命令。
- 显式可分发事务。DataContext类的实例可以在Transaction属性指定的事务内调用LINQ to SQL API,而不会创建新的事务。
- 执行命令的最大时间属性CommandTimeout
CommandTimeout属性可以设置或获取DataContext类的实例的查询数据库操作的超时期限。
该时间的单位为秒,默认值为30秒。可根据查询数据库的操作增大该属性的值,来保证查询数据库的操作能够完成。
DataContext类的方法
DataContext类包括多个方法,如创建数据库的CreateDatabase()方法、检测数据库是否存在的DatabaseExistsO方法、删除数据库的DeleteDatabaseO方法、执行SQL命令的ExecuteCommandO方法、执行SQL査询的ExecuteQueryO方法等。
- 执行SQL命令的ExecuteCommand()方法
ExecuteCommand())方法能够执行指定的SQL语句,并通过该SQL语句来操作数据库。
具体步骤如下:
(1)创建LinqDBDataContext类的实例db。
(2)创建被执行的SQL语句。
(3)调用ExecuteCommandO方法执行上述指定的SQL语句。
(4)显示ExecuteCommandO方法执行的结果,即被修改记录的数量。
- ///<summaiy>
- ///执行SQL命令的ExecuteCommand()方法
- ///〈/summary〉
- private void ExecuteCommandWithParam()
- {
- //创建LinqDB数据库上下文的实例
- LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
- //创建SQL语句
- string sql = "UPDATE Userlnfo SET Username = {0} WHEREID > 90";
- //执行SQL语句,并返回SQL语句影响的行数
- int result = db.ExecuteCommand(sql,"New Name");
- //显示执行的结果
- Response.Write(result.ToString()+"条数据被修改!");
执行结果为:12条数据被修改!
- 执行SQL查询的ExecuteQuery()方法
ExecuteQuery()方法可以执行指定的SQL查询语句,并通过SQL查询语句检索数据,查询结果保存数据类型为IEnumerable或IEnumerable<Tresult>的对象。
具体步骤如下:
(1)创建LinqDBDataContext类的实例db。
(2)创建被执行的SQL查询语句。
(3)调用ExecuteQuery()方法执行上述指定的SQL查询语句,查询结果保存在result变量中。其中,查询结果中的元素的数据类型为UserInfo。
(4)使用foreach语句显示result变量中的信息。
- ///<summary>
- ///执行SQL査询的ExecuteQuery()方法
- ///</summary>
- private void ExecuteSqlQuery()
- {
- //创建LinqDB数据库上下文的实例
- LinqDBDataContext db = new LinqDBDataContext(
- LinqSystem.LinqDBConnectionString);
- //创建SQL语句
- string sql = "SELECT TOP 5 * FROM UserInfo";
- IEnumerable<UserInfo>users = db.ExecuteQuery<UserInfo>(sql);
- //显示查询的结果
- foreach(Userlnfo u in users)
- {
- Response.Write("用户名称:"+u.Username+"<br/>;
- }
- }
执行结果为:
- 用户名称为:admin
- 用户名称为:dorient
- 用户名称为:user1
- 用户名称为:user2
- 用户名称为:user3
- 提交更改到数据库的SubmitChanges()方法
SubmitChanges()方法能够计算要插入、更新或删除的己修改对象的集,并执行相应的修改提交到数据库,并修改数据库。
- 获取表集合的GetTable()方法
GetTable()方法能够获取DataContext类的实例的表的集合。
- 获取已修改对象的GetChangeSet()方法
GetChangeSet()方法能够获取被修改的对象,它返回由3个只读集合(Inserts、Deletes和Updates)组成的对象。
- Deletes属性,已从ChangeSet中删除的实体。
- Inserts属性,己插入到Changeset中的实体。
- Updates属性,己在ChangeSet中更新的实体。