LINQ TO SQL是LINQ中最重要的一个组件,为NET. Framework3.5所支持,它可以为关系数据库提供一个对象模型,并在该对象模型基础上实现对数据的查询丶添加丶修改丶删除等功能,即LINQ TO SQL提供了用于将关系数据作为对象管理的运行时基础结构。
LINQ TO SQL最重要的一个功能就是为数据库创建一个对象模型(由基于.NET框架的类组成),并将该对象模型映射到数据库中对应的对象
LINQ TO SQL对象模型的基本元素 | SQL Server数据库中的对象 |
实体类 | 表 |
属性或字段 | 列 |
关联 | 外键关系 |
方法 | 存储过程的函数 |
使用SQL Server数据库Stumarks介绍LINQ TO SQL对象模型和SQL Server数据库中的对象的映射关系。如下图:
一丶数据上下文
1. 连接属性Connection
Connection属性可以获取DataContext类的实例的连接。值得注意的是,用户获取该属性的值之后,该连接对象的默认状态是关闭的。因此,用户如果使用该连接对象,则需要显式打开该连接对象的状态。
2. 事物属性Transaction
Transaction属性为DataContext类的实例设置访问数据库的事务。其中,LINQ TO SQL支持以下三种事务。
(1)显式事务。(2)隐式事务。(3)显式可分发事务。
3. 执行命令的最大时间属性CommandTimeout
CommandTimeout属性可以设置或获取DataContext类的实例的查询数据库操作的超时期限。该时间的单位为秒,默认值为30秒。有时,查询数据库操作可能需要很长的时间。此时,则需要增大该属性的值,以保证查询数据库的操作能够完成。
DataContext 类的方法
1. 执行SQL命令的ExecuteCommand()方法
ExecuteCommand()方法能够执行指定的SQL语句,并通过该SQL语句来操作数据库。ExecuteCommand()方法返回一个整数值,即该SQL语句影响记录的数量。
先创建实例,创建被执行的SQL语句,调用方法显示语句,显示方法执行的结果
protected void btnCommand_Click(object sender, EventArgs e){LinqDBDataContext DB = new LinqDBDataContext();string strSql = "update userinfo set username={0} where id=7";int result = DB.ExecuteCommand(strSql, "花无缺");Response.Write(result + "条数据受影响");}
运行结果为:1条数据受影响
2. 执行SQL查询的ExecuteCommand()方法
ExecuteCommand()可以执行指定的SQL查询语句,并通过SQL查询语句检索数据,查询结果保存数据类型为IEnumerable或IEnumerable<TResult>的对象。
protected void btnQuery_Click(object sender, EventArgs e){LinqDBDataContext DB = new LinqDBDataContext();string strSql = "select top 5 * from userinfo";var users = DB.ExecuteQuery<UserInfo>(strSql);foreach (var user in users){Response.Write("用户昵称:" + user.Username + "<br />");}}
3. 提交更改到数据库的SubmitChanges()方法
SubmitChang()方法能够计算要插入丶更新或删除的已修改对象的集,并执行相应的修改提交到数据库,并修改数据库。
4. 获取表集合的GetTable()方法
GetTable()方法能够获取DataContext类的实例的表的集合
5. 获取已修改对象的GetChangeSet()方法
GetChangeSet()方法能够获取被修改的对象,它返回由三个只读集合组成的对象。它的返回值的类型为ChangeSet。
Deletes属性,已从ChangeSet中删除的实体。
Insert属性,已插入到ChangeSet中的实体。
Updates属性,已在ChangeSet中更新的实体。
二丶处理Table<T>类型的结果
使用Table<T>能够方便地操作数据库中的数据,如插入数据到数据库丶修改数据库中的数据丶删除数据库中的数据。下图为Table<T>主要操作数据库的方法
方法名称 | 说明 |
DeleteAllOnSubmit(TSubEntity) | 将集合中所有实体置于pending delete状态 |
DeleteOnSubmit | 将此表中的实体置为pending delete状态 |
InsertAllOnSubmit(TSubEntity) | 将集合中所有处于pending delete状态的实体添加到DataContext |
InsertOnSubmit | 将处于pending delete状态的实体添加到此Table(TEntity) |
三丶处理EntitySet<T>类型的结果
EntitySet<T>用来描述实体类中包含的其他实体的集合。
Add()方法能够将元素或实体添加到EntitySet<T>集合中。
Remove()方法能够从EntitySet<T>集合中移除指定的元素或实体。如果成功移除返回true;否则返回false。
RemoveAt()方法能够从EntitySet<T>集合中移除指定位置处的元素或实体。
Contains()方法能够判断在EntitySet<T>集合中是否包含指定的元素或实体。如果EntitySet<T>集合包含指定的元素或实体,则返回true;否则返回false。
四丶处理EntityReTf<T>类型的结果
EntityReTf<T>类用来处理一对多关系中的数据。
五丶处理ISingleResult<T>类型的结果
ISingleResult<T>泛型接口表示具有单个返回序列的映射函数的结果。
如有不足,请批评指正,谢谢