写点什么

LINQ to SQL 何去何从

2008 年 12 月 23 日

尽管微软的 ORM 存在许许多多的问题,而且市面上例如 LLBLGen,nHibernate 与 OpenAccess 之类的替代品已经够多了,许多开发者被强迫使用微软的技术是因为他们的公司或客户的需要。而在取舍之间,看起来大多数开发者深信实体框架(Entity Framework)并非可行的方案。那么他们该如何应对?

Steel Price 选择忘记 Linq to Sql 的衰亡,继续使用它是因为它能工作。至于实体框架,他写道,它并不能访问内在的列。

我永远都不会使用这样的一种联合关系,譬如:“给我提供 John 修改过的所有地址”。这会使得事情变得糟糕,我无法获得 Address 的 CreatedById,除非我加载整个 Login 对象,并像这样引用它:Address.CreatedByLogin.LoginId。当你在编写和创建查询时,这种做法就太糟糕了。

有办法解决这个问题吗?当然有,但方法都过于复杂与繁琐,使用 L2E(译注:即 Linq to Entity)使得我 80% 的工作都变复杂了。而只有 20% 的功能是我真正需要额外的进行复杂的映射,但我可以使用其它工具,例如 LLBLGen Pro 或 OpenAccess,因为它们更易于使用。

C# MVP David Hayend 则说出了大多数开发者的心声,那就是让 LINQ to SQL 开源。他更进一步地建议 LINQ to SQL 应该采取 ASP.NET MVC 相同的方式,源自于社区的设计。

我强烈建议微软为 LINQ To SQL 重新组建最初的开发团队,并将他们融入到.NET 4.0 版本中,并以开源的方式放在 CodePlex 上。这别无选择,鉴于 LINQ To SQL 已经明显偏向于实体框架,只有 ADO.NET 团队能够为他找到正确的方向。

我建议新的团队采取和 ASP.NET MVC 团队相似的方式,使我们能够获得一个可测试的轻量级 O/R 映射器,并关注于持续获得的社区反馈而频繁发布 CTP 版本。

Ian Cooper, another MVP, sees neither LINQ to SQL nor Entity Framework being completely suitable,

另一位 MVP Ian Cooper 则认为 LINQ to SQL 和实体框架都不完全适用。

简单地靠打压竞争者很难挽救我们对 EF(译注:即实体框架 Entity Framework)信心的缺乏。我们需要对批评进行更加深入地理解,但是那些说法并不能指出 LINQ To SQL 比 EF 好在哪些地方。L2S 具有很多 EF 非常需要的特性,例如领域优先支持、POCO、SQL 生成的性能、延迟加载等。如果缺乏对这些优势的公共认识,怀疑则必然延续,这无关 ADO.NET 是否认识到 LINQ To SQL 为何具有这般正面的支持。

直接抛弃 LINQ to SQL 并不可取,他建议微软承认已经犯下的过错,并基于二者的优势重新开始。

更好的结果应该是看到微软宣布开发 LINQ To SQL 和实体框架共同的继承者。从产品中获得反馈,然后再构建一个新的,可以称之为“LINQ to Relations”或者“LINQ to RDBMS”。如果确有所需,保证重用能够使你节约费用,但却需要重新计划。我无法想象的是,无论如何,比起 L2S 和 EF 开发人员需要在你的 ORM 下一次迭代中需要面对的问题而言,API 的变化要显得更加的重要。

[…]

大多数人赞同 Faulkner 的建议并且正试图抛弃你曾经的最爱。有时候,你投入的特性越多,而越有可能在最后需要重新计划。

那么,就应该及早发布,并且应频繁发布。

最后,Scott Allen 的问题则重点放在数据库上。

我认为,LINQ to SQL 的内部能够从一个好的基础发展为一个通用的数据映射框架,以弥补 ORM 类型的框架(如 Entity Framework)的不足。框架可以去掉一些有关对象到对象映射的繁重工作,或者通过一个提供者类型的架构提供在不同格式之间如 XHTML、JSON、CSV 的额外的映射能力。数据的转换、消息传递、以及数据推动是大多数大型应用程序中不可或缺的部分,框架可以使得这些工作能够以一个通用的方式易于实现与测试,从而带来高效的生产力。

查看英文原文: LINQ to SQL, The Next Step

2008 年 12 月 23 日 22:303907
用户头像

发布了 109 篇内容, 共 36.1 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

想去华为、阿里、腾讯等大厂但又害怕面试?看这一篇就够了

Java架构师迁哥

京东城市时空数据引擎JUST亮相中国数据库技术大会

京东数科风险算法与技术

京东

什么是安全架构《一》

I

安全架构 企业安全 安全治理 应用安全

第六周作业&总结

胡益

作业-第11周

arcyao

架构师训练营 week11 学习笔记

花果山

史上最强鸿蒙教程来袭!2021年最新Android面试精讲,赶紧收藏!

欢喜学安卓

android 程序员 面试 移动开发

week11-作业一

未来已来

架构师训练营大作业二

FG佳

第十一周总结

孤星

排队打饭:公平锁和非公平锁(面试)

叫练

synchronized ReentrantLock lock 公平锁 非公平锁

第十一周作业

孤星

大作业1

Yangjing

架构师训练营第 1 期

极客时间架构师培训 1 期 - 大作业一

Kaven

架构师训练营第二期 Week 11 总结

bigxiang

什么是安全架构《三》

I

信息安全 数据安全 安全架构 企业安全 安全治理

什么是安全架构《二》

I

安全架构 企业安全 安全治理 基础安全

KubeSphere 正式入驻 AWS Quick Start,服务全球用户云原生落地

亚马逊云科技 (Amazon Web Services)

云计算 云原生 AWS

第六周作业

Binary

1499飞天茅台抢购脚本教程、问题与解决方案汇总目录【淘宝-天猫超市、京东】

谙忆

飞天茅台 脚本抢购

第11周作业

Rocky·Chen

week11-作业二根据当周学习情况,完成一篇学习总结

未来已来

架构师训练营大作业 (二)

orchid9

Java并发编程实战(1)- 并发程序的bug源头

技术修行者

Java 多线程 并发

大作业2

Yangjing

架构师训练营第 1 期

架构师 01 期,大作业二

子文

导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

落朽

开发人员必学!2021年最新Android面试精讲,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

架构师训练营 week11 课后作业

花果山

架构师训练营大作业 (一)

orchid9

架构师训练营第二期 Week 11 作业

bigxiang

LINQ to SQL何去何从-InfoQ