写点什么

LINQ to SQL 在.NET 4.0 中的变化

  • 2009-06-05
  • 本文字数:1464 字

    阅读完需:约 5 分钟

微软 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 异常
2009-06-05 08:033083
用户头像

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

关注

评论

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

别再说你不会!linux服务器搭建教程视频百度网盘,nginx入门书籍

Java 程序员 后端

华为Java面试题及答案,java开发实例教程课后答案石磊,查漏补缺

Java 程序员 后端

写给Java软件工程师的3条建议,百度笔试题百度校招面试经验,开源新作

Java 程序员 后端

分享一次面试经历,享学课堂java架构师课程,【高级Java架构师系统学习】

Java 程序员 后端

别再说自己不会JVM虚拟机了,35岁技术人如何转型做管理

Java 程序员 后端

十年Java编程开发生涯,尚学堂网易上的中级,推荐一个GitHub项目

Java 程序员 后端

华为大神花费5个月打造的这份714页学习笔记系列,面试看这个就够了

Java 程序员 后端

云栖大会:《永不止步的云上创新》——蒋江伟

代码 科技革命 计算 云 原生云 CTO 云栖大会

4个实验,彻底搞懂TCP连接的断开

捉虫大师

TCP

助你面试一臂之力,linux基础教程第2版课后思考题答案,阿里巴巴Java面试题

Java 程序员 后端

十分钟带你回顾Spring常问的知识点,springcloud面试题汇集与答案

Java 程序员 后端

分享Java资深架构师的成长之路,今日头条面试经历

Java 程序员 后端

分享我在Java开发中走的一些弯路,不同层级的Java开发者的不同行为

Java 程序员 后端

写给互联网大厂员工的真心话,MySQL优化原理分析及优化方案总结

Java 程序员 后端

分享复习经验和后台开发面经,阿里架构师深入讲解Java开发

Java 程序员 后端

鸿蒙轻内核源码分析:异常钩子模块系统中断异常,如何转储异常信息

华为云开发者联盟

鸿蒙 内存 存储 函数 异常钩子

十分钟带你看懂Netty如何实现C-S,美团Java开发面试

Java 程序员 后端

分享一波阿里、字节、腾讯、美团等精选大厂面试题,Java面试题整理

Java 程序员 后端

分享一点面试小经验,2021吊打面试官系列

Java 程序员 后端

Android 构建工具--AAPT2源码解析(一)

vivo互联网技术

打包APK 源码剖析 Android端

Tapdata 携手精诚瑞宝,共拓 Real Time DaaS 蓝海市场

tapdata

数据库

十年Java编程开发生涯,未来教育计算机二级java激活码,面试官突击一问

Java 程序员 后端

写给即将正在找工作的Java攻城狮,5分钟搞定

Java 程序员 后端

准备Java面试?中公教育java讲师,死磕原理

Java 程序员 后端

分享一点面试小经验,2021年互联网大厂Java笔经

Java 程序员 后端

别再说自己不会了!极客时间破解版没用,Redis成神之路电子版教程已问世

Java 程序员 后端

劲爆!java微信小程序开发教程视频,Java学习路线指南

Java 程序员 后端

分享Java资深架构师的成长之路,Java面试常见问题及回答技巧

Java 程序员 后端

DoS?DDoS?这件事要从另一个D说起……

郑州埃文科技

网络安全 DOS攻击 IP定位

区块链交易隐私如何保证?华为零知识证明技术实战解析

华为云开发者联盟

区块链 金融 零知识证明 同态加密 交易隐私

初级Java面试题大全,极客邦科技面试,linux架构学习视频

Java 程序员 后端

LINQ to SQL在.NET 4.0中的变化_.NET_Jonathan Allen_InfoQ精选文章