NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:032734
用户头像

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

关注

评论

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

开发提效小技巧分享(一)

编程三昧

3月月更 前端工具

OKR怎么写?100个OKR案例模板

PingCode

译文 | 一文看懂技术债

LigaAI

场景应用 技术债务 非功能性需求

患上“远见病”的VR,不得不走进动物世界

脑极体

Linux运维必知:如何从其 PID 中查找进程名称

Ethereal

千万级学生管理系统的考试试卷存储方案

晨亮

「架构实战营」

BabaSSL 发布 8.3.0|实现相应隐私计算的需求

SOFAStack

开源 密码学 隐私计算 国密 BABASSL

docker、k8s 面试总结

yuexin_tech

Docker k8s

将本地代码同步到gitee和github中去

布衣骇客

Git Commit #Github

让ICT飞鸟,长出数字能源的翅膀

脑极体

比特币突破4.4万美元!美欧制裁或推动俄罗斯资金转向加密货币

CECBC

AWS S3 对象存储攻防

火线安全

云原生 云安全

如何在 eNSP 上保存配置?

Ethereal

什么是元宇宙?为何要关注它?——解码元宇宙

CECBC

聊聊 Pulsar: Pulsar 分布式集群搭建

老周聊架构

云原生 Apache Pulsar 3月月更

360携手HarmonyOS打造独特的“天气大师”

HarmonyOS开发者

HarmonyOS 应用开发

微信小程序图片拖拽排序探索

云小梦

CSS 微信小程序 图片拖动 movable-area

面试官:GRE 和 IPsec 隧道有什么区别?

Ethereal

期待!Fedora 36 发布日期和新功能

Ethereal

[银行面试系列]1 进入银行之前必须了解的20个问题

暖蓝笔记

3月程序媛福利 3月月更

Linux小技巧:如何在 Vim 中显示行号?

Ethereal

从用户输入URL到页面展示,这中间发生了什么?

Tristan

前端 浏览器

如何打造良好的分享氛围

Hockor

团队管理 技术分享

搭建 VuePress 博客,你可能会用到的一些插件

冴羽

Vue 博客 vuepress 博客开发 博客搭建

如何在 Linux 中将主目录移动到新分区或磁盘?

Ethereal

如何做好一场技术分享

Hockor

团队管理 个人成长

44条工程管理经验教训

hongfei

项目管理 3月月更 工程管理 工程经验

SpringDataRedis序列化带有双引号

编号94530

redis spring 序列化 Jackson

紫光展锐解除楚庆CEO职务,内部员工爆料那些不为人知的内情!

IC男奋斗史

芯片行业思考

三条命令搭建自己的博客平台

山河已无恙

WordPress 3月月更

性能测试中Disruptor框架shutdown失效的问题分享

FunTester

Disruptor 性能测试 接口测试 高性能队列 FunTester

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