【AICon】硅谷视野+中国实践,汇聚全球顶尖技术的 AI 科技盛会 >>> 了解详情
写点什么

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

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

关注

评论

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

Databend 源码阅读:配置管理

Databend

DxO PhotoLab 6 for Mac(raw图片处理软件) 6.10.0.57中文激活版

mac

raw图片处理软件 苹果mac Windows软件 DxO PhotoLab 6

百度交易中台之内容分润结算系统架构浅析

百度Geek说

大数据 架构 交易 调度任务 企业号9月PK榜

喜迎双节,测评征文活动等你来参加!

InfoQ写作社区官方

AI 大模型

C++ 使用getline():从文件中读取一行字符串

智趣匠

探索AI技术对古彝文保护与研究应用

袁袁袁袁满

JavaScript中的浮点数之谜:为什么0.1 + 0.2 不等于 0.3?

Lee Chen

JavaScript 前端

关于可逆计算的讨论--答圆角骑士魔理沙

canonical

低代码 领域模型 可逆计算 Nop平台

OpenHarmony定义组件重用样式:@Styles装饰器

OpenHarmony开发者

OpenHarmony

开源大咖说 | openEuler: 技术引领,走向世界

openEuler

Linux 开源 操作系统 openEuler 资讯

文件和图像比较软件:Kaleidoscope激活最新版

胖墩儿不胖y

Mac软件 对比工具 对比软件

简单好用的清理工具 BuhoCleaner激活中文版

mac大玩家j

Mac软件 清洁工具 清洁优化软件

为什么 Lettuce 会带来更长的故障时间?

阿里技术

TCP

软件开发全套资料获取

金陵老街

Dubbo源码浅析(一)—RPC框架与Dubbo | 京东云技术团队

京东科技开发者

spring dubbo RPC RPC框架 企业号9月PK榜

每天打卡,跟冰河肝这些项目,技术能力嗖嗖往上提升

冰河

程序员 分布式 微服务 架构师 项目实战

华为负一屏手机充值限时优惠来袭,快来薅羊毛

最新动态

构建DevSecOps中的代码三层防护体系

华为云PaaS服务小智

云计算 敏捷开发 软件开发 华为云

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