Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penyedia Entity Framework 6 ini adalah penyedia pengganti untuk penyedia SQL Server bawaan.
Penyedia ini bergantung pada penyedia ADO.NET Microsoft.Data.SqlClient modern, yang mencakup keuntungan berikut daripada driver yang saat ini digunakan:
- Klien saat ini menerima dukungan penuh berbeda dengan
System.Data.SqlClient, yang berada dalam mode pemeliharaan - Mendukung fitur SQL Server baru, termasuk dukungan untuk protokol klien yang ditingkatkan SQL Server 2022 (TDS8)
- Mendukung sebagian besar metode autentikasi Azure Active Directory
- Mendukung Always Encrypted dengan .NET
Perhatikan bahwa penyedia ini hanya memperbarui runtime dan tidak akan berfungsi dengan alat Visual Studio yang ada.
Build terbaru dari paket ini tersedia dari NuGet
Konfigurasi
Ada berbagai cara untuk mengonfigurasi Kerangka Kerja Entitas untuk menggunakan penyedia ini.
Anda dapat mendaftarkan penyedia dalam kode menggunakan atribut:
[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))]
public class SchoolContext : DbContext
{
public SchoolContext() : base()
{
}
public DbSet<Student> Students { get; set; }
}
Jika Anda memiliki beberapa kelas yang mewarisi dari DbContext dalam solusi Anda, tambahkan atribut DbConfigurationType ke semuanya.
Atau Anda dapat menggunakan metode SetConfiguration sebelum panggilan akses data apa pun:
DbConfiguration.SetConfiguration(new MicrosoftSqlDbConfiguration());
Atau tambahkan baris berikut ke kelas DbConfiguration turunan yang ada:
SetProviderFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance);
SetProviderServices(MicrosoftSqlProviderServices.ProviderInvariantName, MicrosoftSqlProviderServices.Instance);
// Optional
SetExecutionStrategy(MicrosoftSqlProviderServices.ProviderInvariantName, () => new MicrosoftSqlAzureExecutionStrategy());
Anda juga dapat menggunakan konfigurasi berbasis App.Config:
<?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>
Jika Anda menggunakan App.Config dengan aplikasi .NET 6 atau yang lebih baru, Anda harus menghapus <system.data> bagian di atas dan mendaftarkan DbProviderFactory dalam kode sekali:
DbProviderFactories.RegisterFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance);
Penggunaan EDMX
Jika Anda menggunakan file EDMX, perbarui nama Provider tersebut.
<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" >
Untuk menggunakan file EDMX dengan perancang Visual Studio, Anda harus mengalihkan nama penyedia kembali ke
System.Data.SqlClient
Perbarui juga nama penyedia di dalam string koneksi EntityConnection -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"
/>
Perubahan kode
Untuk menggunakan penyedia dalam solusi yang ada, diperlukan beberapa perubahan kode (sesuai kebutuhan).
using System.Data.SqlClient; =>using Microsoft.Data.SqlClient;
using Microsoft.SqlServer.Server; =>using Microsoft.Data.SqlClient.Server;
Kelas berikut telah diganti namanya untuk menghindari konflik dengan kelas yang digunakan System.Data.SqlClient di penyedia SQL Server yang ada:
SqlAzureExecutionStrategy =>MicrosoftSqlAzureExecutionStrategy
SqlDbConfiguration =>MicrosoftSqlDbConfiguration
SqlProviderServices =>MicrosoftSqlProviderServices
SqlServerMigrationSqlGenerator =>MicrosoftSqlServerMigrationSqlGenerator
SqlSpatialServices =>MicrosoftSqlSpatialServices
SqlConnectionFactory =>MicrosoftSqlConnectionFactory
LocalDbConnectionFactory =>MicrosoftLocalDbConnectionFactory
Masalah umum
Azure App Service dengan konfigurasi string koneksi dan .NET Framework
Jika Anda menggunakan Azure App Service dengan .NET Framework dan fitur konfigurasi string koneksi s, Anda dapat mengalami masalah runtime, karena ProviderName pengaturan string koneksi dalam skenario ini dikodekan secara permanen ke System.Data.SqlClient.
Solusinya adalah menggunakan kelas MicrosoftSqlDbConfiguration turunan seperti ini:
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());
}
}
Kemudian gunakan kelas turunan ini dalam konfigurasi berbasis kode yang dijelaskan di atas.
EntityFramework.dll diinstal di GAC
Jika versi lama EntityFramework.dll diinstal di .NET Framework GAC (Global Assembly Cache), Anda mungkin mendapatkan kesalahan ini:
The 'PrimitiveTypeKind' attribute is invalid - The value 'HierarchyId' is invalid according to its datatype
Solusinya adalah menghapus .dll dari GAC. Rakitan EF6 tidak boleh diinstal di GAC.