achtergrond
In de beginjaren van .NET was het System.Data-framework een belangrijk onderdeel. Het biedt een manier om .NET-databasedrivers te maken, vergelijkbaar met Visual Basic's ActiveX Data Objects. Hoewel de API anders is, wordt de naam hergebruikt, vandaar de bijnaam ADO .NET.
Een belangrijk verschil tussen ADO en ADO .NET (oftewel System.Data) is het objectmodel. In ADO hoef je meestal alleen Connection-, Command- en Recordset-objecten te gebruiken, en de OleDB/ODBC-driver verbergt iets anders. Dit verbetert het hergebruik van code, maar het is moeilijk voor ontwikkelaars om sommige databasefuncties beschikbaar te stellen.
In ADO .NET kun je ook OleDB/ODBC gebruiken, maar in de meeste gevallen gebruik je een reeks database-specifieke klassen. Deze klassen zijn afgeleid van DBConnection, DBCommand, en DBDataReader, die de herbruikbaarheid van de originele code behouden. Maar omdat het sterk benoemde types zijn, moeten ze expliciet deel uitmaken van de .NET-bibliotheek.
Waarschijnlijk om de ontwikkeling te vereenvoudigen, maken SQL Server, OleDB en ODBC-drivers allemaal deel uit van het System.Data-framework. Deze aanpak was destijds acceptabel, maar veroorzaakte problemen in de huidige ontwikkelingscyclus van SQL Server.
Sterker nog, de releasecycli van SQL Server zijn veranderd van 3 tot 5 jaar tot bijna elk jaar. Nieuwe releases vereisen vaak updates van de .NET-driver, wat niet mogelijk is als deze gekoppeld is aan de .NET-standaard releasecyclus.
De eerste stap is het splitsen van de System.Data-bibliotheek. NET Core voert deze stap uit door aparte bibliotheken te bieden voor elke databasedriver. De volgende stap is om de SQL Server-driver volledig te scheiden van .NET Core/Standard. Om dit te doen, hebben ze Microsoft.Data.SqlClient ontwikkeld.
Upgrade naar Microsoft.Data.SqlClient
Voor de meeste ontwikkelaars is het gebruik van Microsoft.Data.SqlClient heel eenvoudig, waarbij je gewoon de using statement bovenaan elke klasse aanpassen. Bovendien gebruikt het dezelfde klassennamen en API's, en biedt het ongeveer dezelfde functies.
Voor lichtgewicht ORM's zoals Dapper of RepoDB zijn verdere wijzigingen niet nodig.
Als ontwikkelaars ORMs gebruiken om verbindingen te beheren (bijv. EF, NHibernate), moeten ze wachten op ORM-upgrades.
De meer lastige zijn die die ORM's mengen. Als de ene ORM Microsoft.Data.SqlClient gebruikt en de andere System.Data.SqlClient, werkt het niet tegelijk. Dit is vooral belangrijk bij het werken met gedeelde SqlTransaction-objecten.
bruikbaarheid
Versie 1.0 van Microsoft.Data.SqlClient is beschikbaar voor deze platforms:
- .NET Framework 4.6+
- .NET Core 2.1+
- .NET Standard 2.0+
Bekende problemen
Niet iedereen hoeft meteen te upgraden. Deze bekende problemen worden vermeld in de documentatie:
- User Data Type (UDT) werkt mogelijk niet met Microsoft.Data.SqlClient.
- Azure Key Vault en Microsoft.Data.SqlClient hebben geen keystore.
- Microsoft.Data.SqlClient ondersteunt Always Encrypted niet voor beveiligde enclaves.
- Alleen .NET Framework en .NET Core ondersteunen Always Encrypted, .NET Standard niet, omdat .NET Standard enkele encryptieafhankelijkheden mist.
Originele link:https://blog.csdn.net/weixin_39777464/article/details/111698467 |