Yapılandırma Dosyası Ayarları
Entity Framework, yapılandırma dosyasından bir dizi ayarın belirtilmesine izin verir. Genel olarak EF, 'yapılandırma üzerinde kural' ilkesini izler: Bu gönderide açıklanan tüm ayarlar varsayılan bir davranışa sahiptir, yalnızca varsayılan değer gereksinimlerinizi karşılamadığında ayarı değiştirme konusunda endişelenmeniz gerekir.
Yapılandırma verileri yönergeleri
- Parolaları veya diğer hassas verileri asla yapılandırma sağlayıcı kodunda veya düz metin yapılandırma dosyalarında saklamayın.
- Üretim gizli dizilerini geliştirme veya test ortamlarında kullanmayın.
- Yanlışlıkla bir kaynak kod havuzuna bağlanmamaları için projenin dışındaki sırları belirtin.
- Korumalı Yapılandırma kullanarak yapılandırma dosyasının içeriğini korumayı göz önünde bulundurun.
Uyarı
Bu makalede, kullanıcının kimliğinin doğrulanması gerekmeyen bir yerel veritabanı kullanılır. Üretim uygulamaları kullanılabilir en güvenli kimlik doğrulama akışını kullanmalıdır. Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
Kod Tabanlı Alternatif
Bu ayarların tümü kod kullanılarak da uygulanabilir. EF6'dan başlayarak koddan yapılandırma uygulamanın merkezi bir yolunu sağlayan kod tabanlı yapılandırmayı kullanıma sunuyoruz. EF6'dan önce, yapılandırma yine de koddan uygulanabilir, ancak farklı alanları yapılandırmak için çeşitli API'ler kullanmanız gerekir. Yapılandırma dosyası seçeneği, bu ayarların kodunuzu güncelleştirmeden dağıtım sırasında kolayca değiştirilmesini sağlar.
Entity Framework Yapılandırma Bölümü
EF4.1'den başlayarak, yapılandırma dosyasının appSettings bölümünü kullanarak bir bağlam için veritabanı başlatıcısını ayarlayabilirsiniz. EF 4.3'te yeni ayarları işlemek için özel entityFramework bölümünü kullanıma aldık. Entity Framework, eski biçim kullanılarak ayarlanan veritabanı başlatıcılarını tanımaya devam eder, ancak mümkün olduğunda yeni biçime geçmenizi öneririz.
EntityFramework NuGet paketini yüklediğinizde entityFramework bölümü projenizin yapılandırma dosyasına otomatik olarak eklendi.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
</configuration>
Bağlantı Dizeleri
Bu sayfada, Yapılandırma dosyasındaki bağlantı dizesi'ler de dahil olmak üzere Entity Framework'ün kullanılacak veritabanını nasıl belirlediğini gösteren daha fazla ayrıntı sağlanır.
Bağlantı dizeleri standart connectionStrings öğesine gider ve entityFramework bölümünü gerektirmez.
Kod İlk tabanlı modeller normal ADO.NET bağlantı dizesi kullanır. Örneğin:
<connectionStrings>
<add name="BlogContext"
providerName="System.Data.SqlClient"
connectionString="Server=.\SQLEXPRESS;Database=Blogging;Integrated Security=True;"/>
</connectionStrings>
EF Designer tabanlı modeller özel EF bağlantı dizesi kullanır. Örneğin:
<connectionStrings>
<add name="BlogContext"
connectionString=
"metadata=
res://*/BloggingModel.csdl|
res://*/BloggingModel.ssdl|
res://*/BloggingModel.msl;
provider=System.Data.SqlClient;
provider connection string=
"data source=(localdb)\mssqllocaldb;
initial catalog=Blogging;
integrated security=True;
multipleactiveresultsets=True;""
providerName="System.Data.EntityClient" />
</connectionStrings>
Kod Tabanlı Yapılandırma Türü (EF6 Devamı)
EF6'dan başlayarak, uygulamanızda kod tabanlı yapılandırma için kullanılacak EF için DbConfiguration değerini belirtebilirsiniz. Çoğu durumda, EF DbConfiguration'ınızı otomatik olarak bulacağı için bu ayarı belirtmeniz gerekmez. Yapılandırma dosyanızda DbConfiguration belirtmeniz gerekebilecek durumların ayrıntıları için Kod Tabanlı Yapılandırma'nın DbConfiguration'ı Taşıma bölümüne bakın.
DbConfiguration türü ayarlamak için codeConfigurationType öğesinde derleme nitelikli tür adını belirtirsiniz.
Not
Derleme nitelenmiş adı, ad alanı nitelenmiş adı, ardından virgül ve ardından türün bulunduğu derlemedir. İsteğe bağlı olarak derleme sürümünü, kültürü ve ortak anahtar belirtecini de belirtebilirsiniz.
<entityFramework codeConfigurationType="MyNamespace.MyConfiguration, MyAssembly">
</entityFramework>
EF Veritabanı Sağlayıcıları (EF6 Devamı)
EF6'nın öncesinde, veritabanı sağlayıcısının Entity Framework'e özgü bölümlerinin temel ADO.NET sağlayıcısının bir parçası olarak eklenmesi gerekiyordu. EF6'dan başlayarak EF'ye özgü parçalar artık ayrı olarak yönetilir ve kaydedilir.
Normalde sağlayıcıları kendiniz kaydetmeniz gerekmez. Bu işlem genellikle yüklediğinizde sağlayıcı tarafından gerçekleştirilir.
Sağlayıcılar, entityFramework bölümünün providers alt bölümü altına bir sağlayıcı öğesi dahil ederek kaydedilir. Sağlayıcı girişi için iki gerekli öznitelik vardır:
- invariantName , bu EF sağlayıcısının hedeflediği çekirdek ADO.NET sağlayıcısını tanımlar
- tür , EF sağlayıcı uygulamasının derleme türü adıdır
Not
Derleme nitelenmiş adı, ad alanı nitelenmiş adı, ardından virgül ve ardından türün bulunduğu derlemedir. İsteğe bağlı olarak derleme sürümünü, kültürü ve ortak anahtar belirtecini de belirtebilirsiniz.
Burada örnek olarak, Entity Framework'ü yüklediğinizde varsayılan SQL Server sağlayıcısını kaydetmek için oluşturulan giriş verilmiştir.
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
Kesiciler (EF6.1 Devamı)
EF6.1'den başlayarak, kesme avcılarını yapılandırma dosyasına kaydedebilirsiniz. Kesme makineleri, EF veritabanı sorgularını yürütme, bağlantıları açma vb. gibi belirli işlemleri gerçekleştirdiğinde ek mantık çalıştırmanıza olanak tanır.
Kesme elemanları, entityFramework bölümünün kesme elemanları alt bölümünün altına bir kesme noktası öğesi eklenerek kaydedilir. Örneğin, aşağıdaki yapılandırma tüm veritabanı işlemlerini Konsol'a kaydedecek yerleşik DatabaseLogger kesme aracını kaydeder.
<interceptors>
<interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework"/>
</interceptors>
Veritabanı İşlemlerini Bir Dosyaya Günlüğe Kaydetme (EF6.1 Devamı)
Hata ayıklamaya yardımcı olmak için var olan bir uygulamaya günlük eklemek istediğinizde, kesme noktaları yapılandırma dosyası aracılığıyla kaydetmek özellikle yararlıdır. DatabaseLogger , dosya adını oluşturucu parametresi olarak sağlayarak bir dosyada günlüğe kaydetmeyi destekler.
<interceptors>
<interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
<parameters>
<parameter value="C:\Temp\LogOutput.txt"/>
</parameters>
</interceptor>
</interceptors>
Varsayılan olarak bu, uygulama her başlatıldığında günlük dosyasının üzerine yeni bir dosya yazılmasını sağlar. Bunun yerine, zaten varsa günlük dosyasına eklemek için şunun gibi bir şey kullanın:
<interceptors>
<interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
<parameters>
<parameter value="C:\Temp\LogOutput.txt"/>
<parameter value="true" type="System.Boolean"/>
</parameters>
</interceptor>
</interceptors>
DatabaseLogger ve kesme avcılarını kaydetme hakkında ek bilgi için EF 6.1: Günlüğü yeniden derlemeden açma blog gönderisine bakın.
Kod İlk Varsayılan Bağlantı Fabrikası
Yapılandırma bölümü, Code First'in bağlam için kullanılacak veritabanını bulmak için kullanması gereken varsayılan bir bağlantı fabrikası belirtmenize olanak tanır. Varsayılan bağlantı fabrikası yalnızca bir bağlam için yapılandırma dosyasına bağlantı dizesi eklenmediğinde kullanılır.
EF NuGet paketini yüklediğinizde, yüklediğiniz pakete bağlı olarak SQL Express veya LocalDB'ye işaret eden bir varsayılan bağlantı fabrikası kaydedildi.
Bağlantı fabrikası ayarlamak için, defaultConnectionFactory öğesinde derleme türü adını belirtirsiniz.
Not
Derleme nitelenmiş adı, ad alanı nitelenmiş adı, ardından virgül ve ardından türün bulunduğu derlemedir. İsteğe bağlı olarak derleme sürümünü, kültürü ve ortak anahtar belirtecini de belirtebilirsiniz.
Kendi varsayılan bağlantı fabrikanızı ayarlama örneği aşağıda verilmiştir:
<entityFramework>
<defaultConnectionFactory type="MyNamespace.MyCustomFactory, MyAssembly"/>
</entityFramework>
Yukarıdaki örnek, özel fabrikanın parametresiz bir oluşturucuya sahip olmasını gerektirir. Gerekirse, parameters öğesini kullanarak oluşturucu parametreleri belirtebilirsiniz.
Örneğin, Entity Framework'te bulunan SqlCeConnectionFactory oluşturucuya sabit bir sağlayıcı adı sağlamanız gerekir. Sağlayıcı sabit adı, kullanmak istediğiniz SQL Compact sürümünü tanımlar. Aşağıdaki yapılandırma, bağlamların varsayılan olarak SQL Compact sürüm 4.0'ı kullanmasına neden olur.
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
Varsayılan bir bağlantı fabrikası ayarlamazsanız Code First, öğesine işaret eden SqlConnectionFactory'yi .\SQLEXPRESS
kullanır. SqlConnectionFactory ayrıca bağlantı dizesi bölümlerini geçersiz kılmanızı sağlayan bir oluşturucuya sahiptir. Dışında bir SQL Server örneği .\SQLEXPRESS
kullanmak istiyorsanız, sunucuyu ayarlamak için bu oluşturucuyu kullanabilirsiniz.
Aşağıdaki yapılandırma Code First'un açık bağlantı dizesi ayarlı olmayan bağlamlar için MyDatabaseServer kullanmasına neden olur.
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=MyDatabaseServer; Integrated Security=True; MultipleActiveResultSets=True" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
Varsayılan olarak, oluşturucu bağımsız değişkenlerinin tür dizesi olduğu varsayılır. Bunu değiştirmek için type özniteliğini kullanabilirsiniz.
<parameter value="2" type="System.Int32" />
Veritabanı Başlatıcıları
Veritabanı başlatıcıları bağlam temelinde yapılandırılır. Bunlar yapılandırma dosyasında bağlam öğesi kullanılarak ayarlanabilir. Bu öğe, yapılandırılan bağlamı tanımlamak için derleme tam adını kullanır.
Varsayılan olarak, Code First bağlamları CreateDatabaseIfNotExists başlatıcısını kullanacak şekilde yapılandırılır. Bağlam öğesinde veritabanı başlatmayı devre dışı bırakmak için kullanılabilecek bir disableDatabaseInitialization özniteliği vardır.
Örneğin, aşağıdaki yapılandırma MyAssembly.dll tanımlanan Blogging.BlogContext bağlamı için veritabanı başlatmayı devre dışı bırakır.
<contexts>
<context type=" Blogging.BlogContext, MyAssembly" disableDatabaseInitialization="true" />
</contexts>
Özel başlatıcı ayarlamak için databaseInitializer öğesini kullanabilirsiniz.
<contexts>
<context type=" Blogging.BlogContext, MyAssembly">
<databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly" />
</context>
</contexts>
Oluşturucu parametreleri, varsayılan bağlantı fabrikalarıyla aynı söz dizimini kullanır.
<contexts>
<context type=" Blogging.BlogContext, MyAssembly">
<databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly">
<parameters>
<parameter value="MyConstructorParameter" />
</parameters>
</databaseInitializer>
</context>
</contexts>
Entity Framework'e dahil edilen genel veritabanı başlatıcılarından birini yapılandırabilirsiniz. tür özniteliği, genel türler için .NET Framework biçimini kullanır.
Örneğin, Code First Migrations kullanıyorsanız, başlatıcıyı kullanarak MigrateDatabaseToLatestVersion<TContext, TMigrationsConfiguration>
veritabanını otomatik olarak geçirilecek şekilde yapılandırabilirsiniz.
<contexts>
<context type="Blogging.BlogContext, MyAssembly">
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Blogging.BlogContext, MyAssembly], [Blogging.Migrations.Configuration, MyAssembly]], EntityFramework" />
</context>
</contexts>