InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

LINQ to SQL在.NET 4.0中的变化

作者 Jonathan Allen 译者 张逸 发布于 2009年6月5日

领域
架构 & 设计,
运维 & 基础架构,
语言 & 开发
主题
.NET ,
数据访问
标签
ORM ,
LINQ to SQL ,
.NET Framework 4.0

微软 Data Programmability项目组的Damien Guard发表文章,列出了LINQ to SQL发生的一系列变化。虽然从长远来看,他们的重心还是放在实体框架(Entity Framework)上,但这篇文章无疑可以打消人们对LINQ to SQL前景的担忧。

性能

  • 通过特别定义的文本参数长度,查询计划的重用将更为频繁
  • 利用主键在ID缓存中对单条记录的查找,目前包括query.Where(predicate).Single/SingleOrDefault/First/FirstOrDefaul
  • 在指定DataLoadOptions时减少对查询的执行(对beta1版本,在缓存中的查询同样会考虑DataLoadOptions的值)

可用性

  • ITable接口为实现仿对象提供支持
  • 根据列的类型可以将枚举类型自动转换为int或string类型
  • 在关联的另一端可以指定非主键列,以支持数据的更新
  • 支持查询时列表的初始化语法
  • LinqDataSource目前可以支持继承的实体
  • LinqDataSource支持增加的动态数据查询扩展器(Dynamic Data Query extenders)

查询稳定性

  • Queries that contain sub-queries with scalar projections now work better
  • 现在增加了对自引用IQueryable的检测,不会导致堆栈溢出
  • Skip(0)目前允许贪婪加载(eager loading)[译注:贪婪加载是数据查询的一种优化措施,在查询时将被查询实体的关联实体均查询出来。]
  • GetCommand可以对SQL Compact事务进行操作
  • 属性或字段暴露的连接可以被准确地检测并通知
  • 编译后的查询可以准确地检测映射源的变化并抛出
  • String.StartsWith,EndsWith和Contain目前可以正确地处理“~ in”搜索字符串
  • 能够更好地检测多活动结果集(multiple active result sets, MARS)[译注:MARS是ADO.NET 2.0增加的新功能,允许在同一个数据库连接上处理多个活动的结果集,很好地支持了异步进程处理]
  • 在表值函数(Table-Valued Functions,TVFs)中使用贪婪加载时,能够适当地创建实体间的关系
  • 更好地支持包含了标量投影(scalar projections)子查询的查询

更新稳定性

  • SubmitChanges不再使用事务回滚异常
  • 在变更冲突的场景下,SubmitChanges能够正确地处理时间戳
  • IsDbGenerated属性可以被重命名,而不再要求必须与对应的列名匹配
  • 支持服务器生成的列以及SQL复制/触发器,而不再是抛出SQL异常

通用稳定性

  • Binary类型能够正确地被反序列化
  • 当添加一个数据项到未加载的实体集时,会触发EntitySet.ListChanged事件
  • 连接会在释放上下文时被释放

SQL要素

  • 外键属性设置器可以检查所有影响到的关系,而不仅限于第一次
  • 在不支持主键类型的情况下对错误处理进行了改善
  • 忽略包含表值参数的存储过程,而不是终止该过程
  • 在出现未知数据类型时不会受到破坏

LINQ to SQL类设计器

  • 可以处理在SQL结果集中单个的匿名列
  • 改进了在与允许为空的唯一标识列建立关联时的错误消息
  • 允许添加using语句到partial user类
  • VarChar(1)可以被正确地映射为string而不是char
  • 在存储过程中,DbType特性可以正确地反映Decimal类型的精度与范围
  • 在将表放回到设计器中时,不需要重启就能够反映外键的改变

代码生成(SQL要素+LINQ to SQL类设计器)

  • ForeignKeyReferenceAlreadyHasValueException is now thrown if any association is loaded not just the first
  • 在实体和上下文的命名空间不一致时,使用初值的存储过程可以通过编译
  • 内部的Virtual能够生成正确的语法
  • Mapping特性可以完全避免用户类型的冲突
  • KnownTypeAttributes可以反映包含继承的DataContractSerializer
  • 保证了延迟加载外键的正确性,以及它的可编译性和代码生成
  • 并发地使用存储过程不再考虑实体是否处于不同的命名空间
  • 如果关联并非第一次加载,就会抛出ForeignKeyReferenceAlreadyHasValueException异常
查看英文原文:LINQ to SQL Changes in .NET 4.0

译者 张逸 是一个怀揣梦想的架构师,沉迷于设计之美,著译作包括《软件设计精要与模式》、《WCF服务编程》等。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。