智能体刷屏的背后,是 AI 应用拐点的来临?AICon 北京站议程重磅公布,50+ 硬核分享不容错过 了解详情
写点什么

微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient

  • 2019-10-22
  • 本文字数:1118 字

    阅读完需:约 4 分钟

微软推出Microsoft.Data.SqlClient,替代System.Data.SqlClient

背景

在 .NET 创建之初,System.Data 框架是一个重要的组件。它为创建 .NET 数据库驱动程序提供了一种方式,类似 Visual Basic 的 ActiveX Data Objects。虽然 API 不一样,但重用了它的名称,所以才有了 ADO .NET 这个绰号。


ADO 和 ADO .NET(即 System.Data)之间的一个关键区别是对象模型。在 ADO 中,通常只需要使用ConnectionCommandRecordset对象,OleDB/ODBC 驱动程序隐藏掉了其他东西。这提高了代码复用率,但开发人员难以将一些数据库特性暴露出来。


在 ADO .NET 中,你也可以使用 OleDB/ODBC,但在大多数情况下会使用一系列特定于数据库的类。这些类派生自 DBConnection、DBCommand 和 DBDataReader,可以保持原来的代码复用性。但因为它们是强命名类型,需要显式地作为 .NET 库的一部分。


可能是为了简化开发,SQL Server、OleDB 和 ODBC 驱动程序同时作为 System.Data 框架的一部分。这种方式在当时是可以接受的,但却给现在的 SQL Server 开发周期带来了问题。


实际上,SQL Server 的发布周期已经从 3 年到 5 年变成了几乎每年一次。发布的新版本通常需要更新 .NET 驱动程序,如果它被绑定到 .NET 标准发布周期中,这就不可能及时发布。


第一步是拆分 System.Data 库。 .NET Core 完成了这一步,为每个数据库驱动程序提供了单独的库。下一步是将 SQL Server 驱动程序与 .NET Core/Standard 完全分离。为此,他们创建了 Microsoft.Data.SqlClient。

升级到 Microsoft.Data.SqlClient

对于大多数开发人员来说,使用 Microsoft.Data.SqlClient 将会变得非常简单,只需要修改每个类顶部的 using 语句即可。另外,它使用了相同的类名和 API,并提供了大致相同的特性。


对于轻量级 ORM,如 Dapper 或 RepoDB,不需要做进一步的改动。


如果开发人员使用 ORM 来管理连接(例如 EF、NHibernate),就需要等待 ORM 升级。


比较麻烦的是那些混合 ORM。如果一个 ORM 使用了 Microsoft.Data.SqlClient,而另一个使用了 System.Data.SqlClient,就不能同时正常运行。这在使用共享 SqlTransaction 对象时尤为重要。

可用性

1.0 版 Microsoft.Data.SqlClient 可用于这些平台:


  • .NET Framework 4.6+

  • .NET Core 2.1+

  • .NET Standard 2.0+

已知问题

并不是每个人都需要马上升级。文档中指出了这些已知问题:


  • 用户数据类型(UDT)可能无法与 Microsoft.Data.SqlClient 一起使用。

  • Azure Key Vault 和 Microsoft.Data.SqlClient 没有密钥存储。

  • Microsoft.Data.SqlClient 不支持安全飞地的 Always Encrypted。

  • 只有 .NET Framework 和 .NET Core 支持 Always Encrypted, .NET Standard 不支持,因为 .NET Standard 缺少某些加密依赖项。


更多信息请参见Microsoft.Data.SqlClient FAQ


原文链接


Introducing Microsoft.Data.SqlClient


2019-10-22 08:005265

评论

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

考前复习必备MySQL数据库(关系型数据库管理系统)

我是哪吒

MySQL 程序员 面试 后端 2月春节不断更

关注产品的利益相关者,想想他们的问题,自己设定一些前提,做个简单的排序。

mas

产品经理训练营-第三周作业

玖玖

28天瞎写的第二百三十六天:emacs 党的没落

树上

28天写作

开发质量提升系列:日常重视好投产,运维拍肩也不怕

罗小龙

最佳实践 方法论 28天写作 2月春节不断更

车载操作系统 (28天写作 Day26/28)

mtfelix

28天写作 车载操作系统 AOS QNX

漫话递归与迭代

Justin

算法 方法论 成长 心灵鸡汤 28天写作

手机里什么APP都没有,一个很无趣的人 | 视频号28天(27)

赵新龙

28天写作

产品经理训练营--第三章作业

Lucas zhou

产品经理训练营

03- 抽奖小助手的那个「谁」

学习高手song轻松

为您收录的操作系统系列-进程管理(上篇)

鲁米

操作系统 进程

【CSS】css控制鼠标点击事件(pointer-events)

德育处主任

html/css CSS小技巧 28天写作 纯CSS 2月春节不断更

熬夜肝了个IDEA插件整合程序员常用的工具,总有你能用上的

Silently9527

程序员 IDEA idea插件

产品经理训练营第二章作业(二)

猫。

产品训练营第三章-第一节小结

skylar

offline app

lidaobing

28天写作 offline app

超好用的文件转换神器!拿走不谢~

白色蜗牛

程序员 软件工具 生产工具

深入理解 ProtoBuf 原理与工程实践(概述)

vivo互联网技术

数据结构 序列化 protobuf

产品训练营-第三次作业

Geek_娴子

第 3 周作业

老元宵

产品训练营·第三周作业 & 总结

tiu

利益相关者排序

Geek_a32093

利益相关者的问题及方案

梁媛

浅谈OKR工作法

一笑

管理 OKR 28天写作

机器学习笔记之:最熟悉的陌生阵

Nydia

VUCA时代-不敏捷就得死

Ian哥

28天写作

即兴演讲的几种实用脚本

熊斌

读书笔记 28天写作

如果创意也可以被设计「幻想短篇 26/28」

道伟

28天写作

【作业-03】解决方案的设计与积累

西西里奇

产品经理训练营第三周作业

happy-黑皮

产品经理训练营

「产品经理训练营」作业 03

🌟

产品经理 产品经理训练营 产品经理训练

微软推出Microsoft.Data.SqlClient,替代System.Data.SqlClient_语言 & 开发_Jonathan Allen_InfoQ精选文章