фон
В первые годы .NET фреймворк System.Data был важным компонентом. Он предоставляет способ создания драйверов .NET базы данных, аналогично объектам данных ActiveX в Visual Basic. Хотя API отличается, его название используется повторно, отсюда и прозвище ADO .NET.
Одним из ключевых отличий между ADO и ADO .NET (то есть System.Data) является объектная модель. В ADO обычно нужно использовать только объекты Connection, Command и Recordset, а драйвер 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 не имеет некоторых зависимостей шифрования.
Оригинальная ссылка:https://blog.csdn.net/weixin_39777464/article/details/111698467 |