LINQ to SQL的不足
LINQ to sql虽然将数据库操作和业务逻辑隔离开来,使开发人员能够使用单一的语言和知识能够方便的操作数据库并处理业务逻辑。但是这毕竟是微软O/R解决方案的第一个版本,相比相对成熟的DataSet数据集解决方案来说,我们还是可以看到一些不足。
首先,我们注意到所有的数据实体并没有从一个基类中派生,这使得给开发通用的数据实体操作器带来了不便。相对于强类型数据集都从DataSet基类派生,笔者认为数据实体这样做并不是一个很好办法。因为我们可以从DataTable的Columns集合中枚举某张数据库表中的所有字段,却不能够从某个数据实体中枚举该数据库表的所有字段。虽然我们可以通过使用反射的方法获得,但是这样显然并不好。
同理,DataContext也没有提供一个获得所有数据实体的集合的方式,我们无法获得一个DataContext中所有的数据实体,与此相对应的是,即便是强类型数据集,我们也能够通过Tables属性获得该数据集中所有的数据表。
一个典型的例子就是,在笔者的上一本书《ASP.NET 2.0网站开发技术详解》中,提到了一个在多服务器部署的N层应用程序解决方案中实现的中间层数据缓存的项目。在该项目中,就是通过枚举内容中驻留的数据集的数据表的方式来确定某张数据库表中的数据是否被缓存(当然还通过了其他一系列的方法来判断),而如果使用LINQ to sql,这样一个通用的数据缓存方案就很难实现了。
同样,如果希望开发一个快速开发平台,通过配置的方式来实现数据的呈现和处理,比如希望通过配置XML文件来控制实现GridView列表或者Edit详细界面显示的字段的话,目前版本的LINQ to SQL便无法实现了。
再如,假设有这么一个需求,需要查询指定数据库表中某个数据类型为字符串型的字段含有某个指定值的记录,那么使用LINQ to SQL实现也会比较困难。
另外,我们知道DataSet数据集中还有一个数据版本的概念,一共有Original、Current、Proposed、Default四种版本,我们在对数据进行操作时可以根据数据行的不同版本值以及其他条件决定是否对数据进行更新,也即AcceptChanges或RejectChanges。而在LINQ to SQL中,要获得实体数据的变更却非常麻烦,必须使用DataContext的GetChangeSet方法来获得,而且获得的变更集能够提供的信息也实在太有限,要对某一具体数据取消更新也很困难,基本上可以认为是不可能的。
所以,当我们在考虑使用数据集方式还是LINQ to SQL实体对象模型来操作数据库的时候应当充分考虑以上情况并结合自己的实际使用需求来决定在自己的项目中使用哪种方案。
LINQ to SQL的不足相关推荐
- 如何查看Linq to SQL运行时,实际执行的Sql语句
调试Linq to sql代码是, 如果遇到错误,很难判断错误的原因是什么,如果能够输出实际执行的sql原文,对于我们寻找错误的原因有有很大帮助. 以下是我用到的方法: StringBuilder s ...
- Linq to SQL 资源
Scott Guthrie 的 Linq to SQL 系列: 1)介绍 http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to ...
- .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理
步步为营VS 2008 + .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理 作者:webabcd 介绍 以Northwind为示例数据库,DLINQ(LINQ ...
- 一步一步学Linq to sql(六):探究特性
延迟执行 IQueryable query = from c in ctx.Customers select c; 这样的查询句法不会导致语句立即执行,它仅仅是一个描述,对应一个SQL.仅仅在需要 ...
- LINQ to SQL 在 Visual Studio 2008 中的简单应用
在.Net Framework 3.5 中,最激动人心的就是增加了LINQ功能,LINQ在数据集成的基础上提供了新的轻型方式.有了LINQ,我们创建的查询现在就编程了.Net 框架的一个成员,在对要操 ...
- 一步一步学Linq to sql(一):预备知识
从今天起将推出新手讲堂,首先从linq开始详细讲解.一步一步学Linq to sql(一):预备知识 什么是Linq to sql Linq to sql(或者叫DLINQ)是LINQ(.NET语言集 ...
- 一步一步学linq to sql(四)查询句法
select 描述:查询顾客的公司名.地址信息 查询句法: var 构建匿名类型1 = from c in ctx.Customers select new { 公司名 = c.CompanyName ...
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 1)
在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 1) 在新的.Net Framework 3.5平台上,Microsoft发布了LINQ(C# 3.0, ...
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(Part5) 转
设计开发表现层 表现层负责应用程序的用户界面,图4.1是表现层的详细视图,包括Web Forms, Web User Control, Code-Behind 和共享的用户界面代码.表现层负责推送信息 ...
- LINQ : 如何为LINQ TO SQL实现自定义业务逻辑
LINQ TO SQL很好很强大,它几乎包含了我们能够想到的所有与数据库有关的操作,甚至也包含了一些我们可能都没有想到的. 但不管怎样,也许我们需要在LINQ TO SQL的操作中添加一个自定义业务逻 ...
最新文章
- 这个40M的小工具助你在windows下处理数据如虎添翼!!
- 推荐IronPython开发IDE: IronPython Studio
- 【app.json】配置说明,不断更新中
- 前端学习(2465):ajax发送请求
- 关于RabbitMQ以及RabbitMQ和Spring的整合
- Red Hat 6.5 版本虚拟机安装
- angular 引入编辑器遇到的各种问题。。。
- pySpark加载数据
- LeetCode:Add Binary
- 未来网络安全重塑,保障安全的会不会只有四五家?
- Skype国际版下载地址(非Tom版)
- 关于路由器和交换机的区别图解(总结)
- 双线性插值实现图像放大算法 matlab,FPGA/verilog实现双线性插值图像放大
- 联想ghost重装系统_史上最全的重装ghost系统错误解决方法大全
- [JZOJ5551] 【NOI2019模拟6.24】旅途【最短路】
- 一文解析:安装和运行Qlik Sense的系统要求及浏览器支持
- 虚幻4渲染编程(环境模拟篇)【第五卷:可交互物理植被模拟 - 上】
- Adobe XMP SDK编译
- 1000个手工绘制污渍笔刷
- “元宇宙”既是机遇也是挑战
热门文章
- 如何提高程序员的生产率 (1)
- iOS 8下应用中仅有几个页面需要横屏其余均为竖屏的处理办法
- espresso 2.0.4 Apple Xcode 4.4.1 coteditor 价格
- Linux Windows下忘记mysql超级管理员root密码的解决办法
- JavaScript正则表达式19例(2)
- 洛谷P1364 医院设置
- Coinbase是如何在其加密货币交易平台上应对扩展性挑战的
- php 手动搭建环境
- HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。...
- 我在阿里云玩蟹科技分享篇