Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu Entity Framework 6 sağlayıcısı, yerleşik SQL Server sağlayıcısının yerine geçen sağlayıcıdır.
Bu sağlayıcı, şu anda kullanılan sürücüye göre aşağıdaki avantajları içeren modern Microsoft.Data.SqlClient ADO.NET sağlayıcısına bağlıdır:
- Bakım modunda olan
System.Data.SqlClientile karşılaştırıldığında, geçerli istemci tam destek alıyor. - SQL Server 2022 gelişmiş istemci protokolü (TDS8) desteği de dahil olmak üzere yeni SQL Server özelliklerini destekler
- Çoğu Azure Active Directory kimlik doğrulama yöntemini destekler
- .NET ile Always Encrypted'i destekler
Bu sağlayıcının yalnızca bir çalışma zamanı güncelleştirmesi olduğuna ve mevcut Visual Studio araçlarıyla çalışmayacağını unutmayın.
Bu paketin en son derlemesi NuGet'ten edinilebilir
Yapılandırma
Entity Framework'i bu sağlayıcıyı kullanacak şekilde yapılandırmanın çeşitli yolları vardır.
Sağlayıcıyı bir öznitelik kullanarak koda kaydedebilirsiniz:
[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))]
public class SchoolContext : DbContext
{
public SchoolContext() : base()
{
}
public DbSet<Student> Students { get; set; }
}
Çözümünüzde DbContext'ten devralan birden çok sınıfınız varsa, hepsine DbConfigurationType özniteliğini ekleyin.
Veya herhangi bir veri erişimi çağrısından önce SetConfiguration yöntemini kullanabilirsiniz:
DbConfiguration.SetConfiguration(new MicrosoftSqlDbConfiguration());
Veya mevcut türetilmiş DbConfiguration sınıfınıza aşağıdaki satırları ekleyin:
SetProviderFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance);
SetProviderServices(MicrosoftSqlProviderServices.ProviderInvariantName, MicrosoftSqlProviderServices.Instance);
// Optional
SetExecutionStrategy(MicrosoftSqlProviderServices.ProviderInvariantName, () => new MicrosoftSqlAzureExecutionStrategy());
App.Config tabanlı yapılandırmayı da kullanabilirsiniz:
<?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>
App.Config'i bir .NET 6 veya üzeri bir uygulamayla kullanıyorsanız yukarıdaki bölümü kaldırmanız <system.data> ve DbProviderFactory dosyasını bir kez koda kaydetmeniz gerekir:
DbProviderFactories.RegisterFactory(MicrosoftSqlProviderServices.ProviderInvariantName, Microsoft.Data.SqlClient.SqlClientFactory.Instance);
EDMX kullanımı
EDMX dosyası kullanıyorsanız, Provider adını güncelleyin:
<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" >
EDMX dosyasını Visual Studio tasarımcısıyla kullanmak için sağlayıcı adını tekrar
olarak değiştirmelisiniz.
Ayrıca EntityConnection bağlantı dizesi içindeki sağlayıcı adını da güncelleştirin -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"
/>
Kod değişiklikleri
Sağlayıcıyı mevcut bir çözümde kullanmak için birkaç kod değişikliği (gerektiği gibi) gerekir.
using System.Data.SqlClient; =>using Microsoft.Data.SqlClient;
using Microsoft.SqlServer.Server; =>using Microsoft.Data.SqlClient.Server;
Mevcut SQL Server sağlayıcısında kullanılan System.Data.SqlClient sınıflarla çakışmaları önlemek için aşağıdaki sınıflar yeniden adlandırıldı:
SqlAzureExecutionStrategy =>MicrosoftSqlAzureExecutionStrategy
SqlDbConfiguration =>MicrosoftSqlDbConfiguration
SqlProviderServices =>MicrosoftSqlProviderServices
SqlServerMigrationSqlGenerator =>MicrosoftSqlServerMigrationSqlGenerator
SqlSpatialServices =>MicrosoftSqlSpatialServices
SqlConnectionFactory =>MicrosoftSqlConnectionFactory
LocalDbConnectionFactory =>MicrosoftLocalDbConnectionFactory
Bilinen sorunlar
.NET Framework ve bağlantı dizesi yapılandırmasıyla Azure Uygulaması Hizmeti
.NET Framework ve Azure Uygulama Hizmeti ile bağlantı dizesi yapılandırma özelliği kullanıyorsanız, bu senaryoda bağlantı dizesi ayarının sabit kodlandığı için çalışma zamanı sorunları yaşayabilirsiniz.
Çözüm, aşağıdaki gibi türetilmiş bir MicrosoftSqlDbConfiguration sınıfı kullanmaktır:
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());
}
}
Ardından bu türetilmiş sınıfı yukarıda açıklanan kod tabanlı yapılandırmada kullanın.
GAC'de yüklü EntityFramework.dll
.NET Framework GAC'de (Genel Derleme Önbelleği) EntityFramework.dll eski bir sürümü yüklüyse şu hatayı alabilirsiniz:
The 'PrimitiveTypeKind' attribute is invalid - The value 'HierarchyId' is invalid according to its datatype
Çözüm, .dll GAC'den kaldırmaktır. EF6 derlemeleri hiçbir zaman GAC'ye yüklenmemelidir.