一直以为LINQ只应用于查询内存的数据结构,今天看了ScottGu的BlogUsing LINQ to SQL (Part 1) ,原来LINQ如此的酷,要加强学习了。简单翻译描述一下,与大家分享。
用于SQL的LINQ是内置于.NET Framework“Orcas”版本中的一种O/RM(对象关系映射)实现,允许使用.NET类对一个关系型数据库进行建模。然后就可以使用LINQ对数据库进行查询了,而且还支持update/insert/delete操作!
用于SQL的LINQ完全支持数据库中的事务,视图和存储过程。还提供了一种简单的方式来整合数据验证和业务逻辑规则到你的数据模型中去。
第一步,使用LINQ对数据库建模
Visual Studio“Orcas”内置了用于SQL的LINQ设计器,提供了快速建模功能和LINQ对象模型的可视化操作(作者将在下篇文章中详细讲解)。以SQL Server里著名的“北风”数据库为例:
其中定义了四个类:Product,Category,Order和OrderDetail。类中的每个属性映射了数据库表中的相应的字段。每个类的实例则代表了数据库表中的一条记录。箭头代表了不同实体间的关系,映射了数据库中的主键/外键。箭头方向则代表了关系是一对一还是一对多,基于这个,强类型属性就会添加到实体类中。例如,Category类与Product类就是一个一对多关系,这就意味着Product中有一个“Category”属性指向一个代表了Product所属类型的Category实例。
设计器右侧窗口中则包含了与现在的数据库模型互动的相关存储过程的列表,可以手动添加。
当在设计器点击“保存”时,Visual Studio会生成代表建模中的实体和关系的.NET类,自动生成文件添加到解决方案中。同时还会生成一个定制的DataContext类,主要用来数据库中查询实体以及更新数据库。DataContext类中会创建代表建模中每个表的属性,和添加的每个存储过程的相应方法。
第二步,LINQ应用
1. 查询
通过Product/Category关系来查询指定Category的Product,var关键字表示声明的是匿名类型
2. 更新
先从数据库中取出单个Product,更新价格,保存变化回数据库
3. 插入
先新建一个Category,在新建两个属于该Category的Product,然后保存回数据库。注意,在这里不需要管手动理主键/外键关系,仅需要添加Proudct到Category中Products集合,再把Catgory添加到DataContext中的Categories集合即可,DataContext会自动维护主键/外键关系。
4. 删除
从数据库中删除指定Product
5. 调用存储过程
注意,一旦得到Product的集合结果,同样可以执行update/delete操作,并保存回数据库。
6. 分页读取
使用Skip()和Take()方法,从数据库中得到指定行的开始的指定行数的Product集合。有些类似于ObjectDataSource中的分页方法(startRowIndex,maximumRows两个参数),还想到了SQL Server 2005中的ROW_Number()函数:)