DataContext又称为数据上下文,它为LINQ to SQL提供操作数据库的入口。使用LINQ to SQL操作数据库,首先需要为该数据库创建一个继承自DataContext类的自定义的数据上下类。
DataContext概述
DataContext类是一个LINQ to SQL类,它包含连接数据库以及操作数据库的链接字符串信息和方法。DataContext类能够通过数据库连接或连接字符串来映射数据库中的所有实体的源,并跟踪和标识用户对数据库的更改。用户可以调用其SubmitChanges()方法将所有更改提交到数据库。
当DataContext类(或从其派生的类)的实例操作数据库时,实例会自动打开和关闭数据库的连接。如果用户显式打开了实例的连接,那么也必须显式关闭实例的连接。
DataContext类的属性
- 连接属性Connection
Connection属性可以获取DataContext类的实例的连接(类型为DbConnection)。需要注意的是,用户在获取该属性的值(即连接对象)后,该连接对象的默认状态是关闭的。因此,用户如果要使用该连接对象,需要显式打开该连接对象的状态。
- 事务属性Transaction
Transaction属性为DataContext类的实例设置访问数据库的事务。其中,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方法等。
1.执行SQL命令的ExecuteCommand()方法
ExecuteCommand())方法能够执行指定的SQL语句,并通过该SQL语句来操作数据库。ExecuteCommand()方法返回一个整数值,即该SQL语句影响记录的数量。
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条数据被修改!
2.执行SQL查询的ExecuteQuery()方法
ExecuteQuery()方法可以执行指定的SQL查询语句,并通过SQL查询语句检索数据,查询结果保存数据类型为IEnumerable或IEnumerable<Tresult>的对象。
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
3.提交更改到数据库的SubmitChanges()方法
SubmitChanges()方法能够计算要插入、更新或删除的己修改对象的集,并执行相应的修改提交到数据库,并修改数据库。
4
.获取表集合的GetTable()方法
GetTable()方法能够获取DataContext类的实例的表的集合。
5
.获取已修改对象的GetChangeSet()方法
GetChangeSet()方法能够获取被修改的对象,它返回由3个只读集合(Inserts、Deletes和Updates)组成的对象。GetChangeSet()方法返回值的类型为ChangeSet,由3个只读集合(Inserts、Deletes和Updates)组成。ChangeSet类包含以下3个属性。
Deletes属性,已从ChangeSet中删除的实体。
Inserts属性,己插入到Changeset中的实体。
Updates属性,己在ChangeSet中更新的实体。