Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az Entity Framework 6-szolgáltató a beépített SQL Server-szolgáltató helyettesítő szolgáltatója.
Ez a szolgáltató a modern Microsoft.Data.SqlClient ADO.NET szolgáltatótól függ, amely a jelenleg használt illesztőprogramokkal szemben az alábbi előnyöket foglalja magában:
- Az aktuális ügyfél teljes támogatást kap, ellentétben a karbantartási módban lévő ügyféllel
System.Data.SqlClient - Támogatja az új SQL Server-funkciókat, beleértve az SQL Server 2022 továbbfejlesztett ügyfélprotokoll (TDS8) támogatását is
- A legtöbb Azure Active Directory-hitelesítési módszert támogatja
- Az Always Encrypted és a .NET támogatása
Figyelje meg, hogy ez a szolgáltató csak futtatókörnyezeti frissítés, és nem működik a meglévő Visual Studio-eszközkészlettel.
A csomag legújabb buildje elérhető a NuGetből
Konfiguráció
Az Entity Framework többféleképpen konfigurálható a szolgáltató használatára.
A szolgáltatót egy attribútum használatával regisztrálhatja a kódban:
[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))]
public class SchoolContext : DbContext
{
public SchoolContext() : base()
{
}
public DbSet<Student> Students { get; set; }
}
Ha a megoldásban több osztály öröklődik a DbContexttől, adja hozzá mindegyikhez a DbConfigurationType attribútumot.
Vagy használhatja a SetConfiguration metódust az adatelérési hívások előtt:
DbConfiguration.SetConfiguration(new MicrosoftSqlDbConfiguration());
Vagy adja hozzá a következő sorokat a meglévő származtatott DbConfiguration osztályhoz:
SetProviderFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance);
SetProviderServices(MicrosoftSqlProviderServices.ProviderInvariantName, MicrosoftSqlProviderServices.Instance);
// Optional
SetExecutionStrategy(MicrosoftSqlProviderServices.ProviderInvariantName, () => new MicrosoftSqlAzureExecutionStrategy());
Az App.Config-alapú konfigurációt is használhatja:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<providers>
<provider invariantName="Microsoft.Data.SqlClient" type="System.Data.Entity.SqlServer.MicrosoftSqlProviderServices, Microsoft.EntityFramework.SqlServer" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<add name="SqlClient Data Provider"
invariant="Microsoft.Data.SqlClient"
description=".NET Framework Data Provider for SqlServer"
type="Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient" />
</DbProviderFactories>
</system.data>
</configuration>
Ha az App.Config alkalmazást .NET 6-os vagy újabb alkalmazással használja, el kell távolítania a <system.data> fenti szakaszt, és egyszer regisztrálnia kell a DbProviderFactory-t a kódban:
DbProviderFactories.RegisterFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance);
EDMX-használat
Ha EDMX-fájlt használ, frissítse a Provider nevet:
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
<edmx:Runtime>
<edmx:StorageModels>
<Schema Namespace="ChinookModel.Store" Provider="Microsoft.Data.SqlClient" >
Az EDMX-fájl Visual Studio-tervezővel való használatához vissza kell váltania a szolgáltató nevét
System.Data.SqlClient
Frissítse a szolgáltató nevét is az EntityConnection kapcsolati sztringben – provider=Microsoft.Data.SqlClient
<add
name="Database"
connectionString="metadata=res://*/EFModels.csdl|res://*/EFModels.ssdl|res://*/EFModels.msl;provider=Microsoft.Data.SqlClient;provider connection string="data source=server;initial catalog=mydb;integrated security=True;persist security info=True;"
providerName="System.Data.EntityClient"
/>
Kódmódosítások
A szolgáltató meglévő megoldásban való használatához szükség van néhány kódmódosításra (szükség esetén).
using System.Data.SqlClient; =>using Microsoft.Data.SqlClient;
using Microsoft.SqlServer.Server; =>using Microsoft.Data.SqlClient.Server;
A rendszer a következő osztályokat átnevezte, hogy elkerülje a meglévő SQL Server-szolgáltatóban használt System.Data.SqlClient osztályokkal való ütközéseket:
SqlAzureExecutionStrategy =>MicrosoftSqlAzureExecutionStrategy
SqlDbConfiguration =>MicrosoftSqlDbConfiguration
SqlProviderServices =>MicrosoftSqlProviderServices
SqlServerMigrationSqlGenerator =>MicrosoftSqlServerMigrationSqlGenerator
SqlSpatialServices =>MicrosoftSqlSpatialServices
SqlConnectionFactory =>MicrosoftSqlConnectionFactory
LocalDbConnectionFactory =>MicrosoftLocalDbConnectionFactory
Ismert problémák
Azure App Service a .NET-keretrendszerrel és a kapcsolatkarakterláncok konfigurációjával
Ha az Azure App Service-t .NET-keretrendszerrel és a kapcsolati sztringek konfigurációs funkciójával használja, futásidejű problémákat tapasztalhat, mivel ebben a forgatókönyvben a ProviderName kapcsolati sztring beállítása a következőre System.Data.SqlClientvan kódolva: .
A megoldás az alábbihoz hasonló származtatott MicrosoftSqlDbConfiguration osztály használata:
public class AppServiceConfiguration : MicrosoftSqlDbConfiguration
{
public AppServiceConfiguration()
{
SetProviderFactory("System.Data.SqlClient", Microsoft.Data.SqlClient.SqlClientFactory.Instance);
SetProviderServices("System.Data.SqlClient", MicrosoftSqlProviderServices.Instance);
SetExecutionStrategy("System.Data.SqlClient", () => new MicrosoftSqlAzureExecutionStrategy());
}
}
Ezután használja ezt a származtatott osztályt a fent ismertetett kódalapú konfigurációban.
A GAC-ban telepítettEntityFramework.dll
Ha az EntityFramework.dll egy régebbi verziója telepítve van a .NET-keretrendszer GAC-jában (Global Assembly Cache), a következő hibaüzenet jelenhet meg:
The 'PrimitiveTypeKind' attribute is invalid - The value 'HierarchyId' is invalid according to its datatype
A megoldás az .dll eltávolítása a GAC-ból. EF6 szerelvényeket soha nem szabad telepíteni a GAC-ban.