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.
Azure SQL veritabanı seçenekleri
Azure SQL Veritabanı, genellikle Azure Portal aracılığıyla yapılandırılan çeşitli fiyatlandırma seçenekleri sağlar. Ancak, şemayı EF Core geçişlerini kullanarak yönetiyorsanız, EF ile istediğiniz seçenekleri yapılandırabilirsiniz ve EF veritabanını oluşturduğunda bunlar uygulanır.
HasServiceTier kullanarak veritabanının hizmet katmanını (EDITION) belirtebilirsiniz:
modelBuilder.HasServiceTier("BusinessCritical");
HasDatabaseMaxSize kullanarak veritabanının en büyük boyutunu belirtebilirsiniz:
modelBuilder.HasDatabaseMaxSize("2 GB");
HasPerformanceLevel kullanarak veritabanının performans düzeyini (SERVICE_OBJECTIVE) belirtebilirsiniz:
modelBuilder.HasPerformanceLevel("BC_Gen4_1");
HasPerformanceLevelSql kullanarak elastik havuzu yapılandırın, çünkü değer bir metin sabiti değildir:
modelBuilder.HasPerformanceLevelSql("ELASTIC_POOL ( name = myelasticpool )");
Tip
Desteklenen tüm değerleri ALTER DATABASE belgelerinde bulabilirsiniz.
SaveChanges, tetikleyiciler ve OUTPUT ifadesi
EF Core değişiklikleri veritabanına kaydettiğinde, bunu T-SQL OUTPUT yan tümcesini kullanarak iyileştirilmiş bir teknikle yapar. Ne yazık ki OUTPUT yan tümcesinin bazı sınırlamaları vardır; özellikle tetikleyicileri olan tablolarla kullanılamaz, örneğin.
OUTPUT yan tümcesinin kullanımıyla ilgili bir sınırlamayla karşılaşırsanız, belirli bir tabloda UseSqlOutputClause komutunu kullanarak devre dışı bırakabilirsiniz.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.UseSqlOutputClause(false));
}
Bunun yapılması, EF'nin tabloyu güncelleştirmek için daha eski ve daha az verimli bir teknikle geçiş yapmasını sağlar.
Tablolarınızın çoğunun veya tümünün tetikleyicileri varsa, aşağıdaki model oluşturma kuralını kullanarak bunu modelinizin tüm tabloları için yapılandırabilirsiniz:
public class NoOutputClauseConvention : IModelFinalizingConvention
{
public virtual void ProcessModelFinalizing(
IConventionModelBuilder modelBuilder,
IConventionContext<IConventionModelBuilder> context)
{
foreach (var entityType in modelBuilder.Metadata.GetEntityTypes())
{
var table = StoreObjectIdentifier.Create(entityType, StoreObjectType.Table);
if (table is not null)
{
entityType.Builder.UseSqlOutputClause(false);
}
foreach (var fragment in entityType.GetMappingFragments(StoreObjectType.Table))
{
entityType.Builder.UseSqlOutputClause(false, fragment.StoreObject);
}
}
}
}
Bu, her tablo için manuel olarak yapmak zorunda kalmak yerine, modelinizdeki tüm tablolar için UseSqlOutputClause işlevini otomatik olarak çağırır.