原文:Diego
翻译:Edi Wang
本文由 SqlClient 和 SQL 服务器工具上的项目经理 Vicky Harp 撰写。
那些一直密切关注 .NET 开发的人很可能看到 Scott Hunter 的最新博客文章,即《.NET Core 是 .NET 的未来》。.NET Framework 将重点转向稳定性,新功能开发转移到 .NET Core 意味着 SQL Server 需要更改,以便继续以我们及时为 .NET 开发人员提供最新的 SQL 功能,就像过去那样。
System.Data.SqlClient 是用于访问 SQL 服务器或 Azure SQL 数据库ADO.NET提供程序。从历史上看,SQL 在 .NET Framework 中使用 System.Data.SqlClient 作为客户端开发的起点,来验证我们新的 SQL 功能,然后再将这些设计应用到其他驱动程序。我们仍然希望继续这样做,但与此同时,这些相同的新功能也应该在 .NET Core 中提供。
现在,我们有两个代码库和两种不同的 SqlClient 交付到应用程序的方式。在 .NET Framework 中,不同版本会全局安装在 Windows 中。在 .NET Core 中,应用程序可以选择特定的 SqlClient 版本并随应用程序一起发布。如果 SqlClient 交付的 .NET Core 模型也适用于 .NET Framework,这不失为一件好事。
我们不能只提供一个新的包来取代System.Data.SqlClient。这将与现在 .NET Framework 中的内容冲突。这就把我们带到了我们选择的解决方案...
Microsoft.Data.SqlClient
Microsoft.Data.SqlClient 包现在在 NuGet 上提供预览,将成为 SQL Server 的旗舰数据访问驱动程序。
此新包同时支持 .NET Core 和 .NET Framework。在新的命名空间中创建新的 SqlClient 允许旧 System.Data.SqlClient 和新的 Microsoft.Data.SqlClient 并共存。虽然不是自动的,但应用程序有一个相当简单的迁移路径,可以从旧版迁移到新版。只需添加对 Microsoft.Data.SqlClient 的 NuGet 依赖项,并更新引用位置的代码即可。
为了配合我们在这个新模型中加速功能交付的计划,我们很高兴在 .NET Framework 和 .NET Core 上提供对两个新的 SQL Server 功能的支持,以及错误修复和性能改进:
数据分类 – 自 CTP 2.0 以来,在 Azure SQL 数据库和 Microsoft SQL Server 2019 中可用。
UTF-8 支持 – 自 CTP 2.3 以来,在 Microsoft SQL Server SQL Server 2019 中可用。
同样,我们更新了提供程序的 .NET Core 版本,其中支持让人久等的 Always Encrypted (始终加密),也包括对 Enclaves (安全区)的支持:
在 Microsoft SQL Server 2016 及更高版本中,Always Encrypted 可用。
微软 SQL Server 2019 CTP 2.0 中引入了 Enclave 支持。
新包中的二进制文件基于 .NET Core 和 .NET Framework 中 System.Data.SqlClient 的相同代码 。这意味着包中有多个二进制文件。除了支持不同操作系统所需的不同二进制文件外,在定位 .NET Framework 时,与以 .NET Core 为目标时,还有不同的二进制文件。幕后没有神奇的代码合并:我们仍然有来自 .NET Framework 和 .NET Core 的不同代码库(目前)。这也意味着,在 SqlClient 面向 .NET Framework 和面向 .NET Core 的 SqlClient 上,我们仍然有不同的功能支持。如果要从 .NET Framework 迁移到 .NET Core,但由于 .NET Core 还不支持某些功能(除了 Always Encrypted),那么第一个预览版本可能不会更改这个现状。但我们的首要任务是使所有功能跨这些目标框架。
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/1a8428057329ba8f53b8bb43d7ec2830.gif)
Microsoft.Data.SqlClient 路线图
我们的路线图是,更频繁地针对 .NET Core 实现并发布新功能。长期目标是单个代码库。随着时间的推移,我们将达成这一目标,但当前需要的是 .NET Core 上的 SqlClient 中的功能支持,因此这正是我们关注的。同时仍然能够向 .NET Framework 应用程序提供新的 SQL 功能。
功能路线图
.NET Core 的 Azure Active Directory 认证提供程序
Active Directory 密码
托管服务身份
Active Directory 整合
工程路线图
合并 .NET Framework 及 .NET Core 代码库
将程序集开源
迁移到GitHub
虽然我们没有上述功能的日期,但我们的目标是在整个 2019 年发布多个版本。我们预计 Microsoft.Data.SqlClient 在 SQL Server 2019 和 .NET Core 3.0 的 RTM 版本发布之前的某个时候从预览版迁移到正式版本。
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/02ed654eb8ae9bc1c81543bb3643f2b4.gif)
System.Data.SqlClient 将何去何从
这意味着发展重点已经改变。我们无意很快放弃对 System.Data.SqlClient 的支持。它将保持原样,我们将在出现重要的 Bug 和安全问题时修复它们。如果你有一个不使用任何最新SQL功能的典型应用程序,那么你仍然可以有一个稳定和可靠的 System.Data.SqlClient 用很多年。
然而,Microsoft.Data.SqlClient 将是我们今后实现新功能的唯一地方。我们鼓励您评估您的需求,并选择合适的时间将应用程序或库从 System.Data.SqlClient 迁移到 Microsoft.Data.SqlClient。
结尾
请安装 Microsoft.Data.SqlClient 包来尝试预览版。我们想听听你的声音!尽管尚未完成发布源代码的准备,但您已经可以使用 https://github.com/dotnet/SqlClient 的问题跟踪器来报告任何问题。
请记住,ORM框架 (如 EF Core、EF 6 或 Dapper) 和其他非 微软官方库尚未过渡到新提供程序,因此无法通过这些库中的任何一个使用新功能。支持 Microsoft.Data.SqlClient 的 EF Core 的更新版本预计将在即将发布的预览版中推出。
我们还鼓励您访问 GitHub 仓库中的常见问题和发行说明页面。它们包含有关可用功能、如何入门以及我们发布的计划的其他信息。
![640?wx_fmt=gif](https://i-blog.csdnimg.cn/blog_migrate/1bf9ce73d1c1ae7836a6cff91a3e3597.gif)
本文由 SqlClient 和 SQL 服务器工具上的项目经理 Vicky Harp 撰写。