一、LINQ TO SQL概述
1.LINQ TO SQL 是LINQ中最重要的一个组建,为.NET Framework3.5及以上版本所支持,它可以为关系数据库提供一个对象模型,并在该对象模型基础上实现对数据的查询、添加、修改、删除等功能。
2.LINQ TO SQL 最重要的一个功能就是为SQL Server数据库创建一个对象模型(由基于.NET框架的类组成),并将该对象模型映射到SQL Server数据库中相应的对象(如表、列、外键关系、存储过程、函数等)。其中,LINQ TO SQL类映射到SQL Server数据库中的表,这些LINQ to SQL类被称为“实体类”。
LINQ to SQL对象模型的基本元素 | SQL Server数据库中的对象 |
实体类 | 表 |
属性或字段 | 列 |
关联 | 外键关系 |
方法 | 存储过程或函数 |
二、数据上下文
DataContext又称为数据上下文,它为LINQ to SQL提供操作数据库的入口。如果使用LINQ to SQL操作数据库,则首先需要为该数据库创建一个继承于DataContext类的自定义的数据上下文类,并在该类中定义表,以及操作数据的方法等。
1.DataContext概述
DataContext类是一个LINQ to SQL类,它充当SQL Server数据库与映射到该数据库的LINQ to SQL实体类之间的通道,它包含用于连接数据库以及操作数据数据的连接字符串信息和方法。用户可以调用其SubmitChanges()方法将所有更改提交到数据库。
2.DataContext属性
连接属性Connection:可以获取DataContext类的实例的连接(类型为DbConnection)。
事务属性Transaction:为DataContext类的实例设置访问数据库的事务。
执行命令的最大时间属性CommandTimeout:可以设置或获取DataContext类的实例的查询数据库操作的超时期限。该时间单 位为秒,默认值30秒。
3.DataContext类的方法
1.执行SQL命令的ExecuteCommand()方法
2.执行SQL查询的ExecuteQuery()方法
3.提交更改到数据库的SubmitChanges()方法
4.获取表集合的GetTable()方法
5.获取已修改对象的GetChangeSet()方法
三、处理Table<T>类型的结果
方法名称 | 说 明 |
DeleteAllOnSubmit(TSbuEntity) | 将集合中的所有实体置于pending delete状态 |
DeleteOnSubmit | 将此表中的实体置为pending delete状态 |
InsertAllOnSubmit(TSubEntity) | 将集合中所有处于pending insert状态的实体添加到DataContext |
InsertOnSubmit | 将处于pending insert 状态的实体添加到此Table(TEntity) |
//添加一个新的角色信息到Role表中
private void InsertRole()
{
//创建LinqDB数据库的数据上下文实例
LinqDBDataContext db=new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
Response.Write("添加前角色的数量:"+db.Role.Count()+"<br/>");
//创建一个新角色
Role role=new Role{RoleName="新的角色"};
//将新的角色添加到数据库中
db.Role.InsertOnSubmit(role);
db.SubmitChanges();
Response.Write("添加后角色的数量:"+db.Role.Count());
}
结果
添加前角色的数量:5
添加后角色的数量:6
注意:上述
db.SubmitChanges();
只改变Table<T>中T的状态,并没有真正的将数据操作的结果写入到数据库中,提交到数据库必须调用相应数据库上下文的SubmitChanages()方法。
四、处理EntitySet<T>类型的结果
EntitySet<T>用来描述实体类中包含的其他实体的集合
处理EntitySet<T>类型的结果(Add):
处理EntitySet<T>类型的结果(Del):
- Add()方法能够将元素或实体添加到EntitySet<T>集合末尾(添加实体的Add( )方法)
- Remove()方法能够从EntitySet<T>中移除指定的元素或实体(移除实体的方法)
- RemoveAt()方法能够从EntitySet<T>中移除指定位置处的元素或实体
- Contains()方法能够判断在EntitySet<T>中是否包含指定的元素或实体(查找是否包含实体的Contains( )方法)
五、EntityRef<T>处理一对多关系中的数据
六、ISingleResult<T>泛型接口表示具有单个返回序列的映射函数的结果。