Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Možnosti databáze Azure SQL
Note
Při připojování k Azure SQL byste měli použít metodu UseAzureSql místo UseSqlServer.
Azure SQL Database nabízí řadu cenových možností , které se obvykle konfigurují prostřednictvím webu Azure Portal. Pokud ale schéma spravujete pomocí migrací EF Core, můžete nakonfigurovat požadované možnosti pomocí EF a použijí se při vytváření databáze EF.
Úroveň služby databáze (EDITION) můžete zadat pomocí HasServiceTier:
modelBuilder.HasServiceTier("BusinessCritical");
Maximální velikost databáze můžete zadat pomocí HasDatabaseMaxSize:
modelBuilder.HasDatabaseMaxSize("2 GB");
Úroveň výkonu databáze (SERVICE_OBJECTIVE) můžete zadat pomocí úrovně HasPerformanceLevel:
modelBuilder.HasPerformanceLevel("BC_Gen4_1");
Ke konfiguraci elastického fondu použijte HasPerformanceLevelSql , protože hodnota není řetězcový literál:
modelBuilder.HasPerformanceLevelSql("ELASTIC_POOL ( name = myelasticpool )");
Tip
Všechny podporované hodnoty najdete v dokumentaci ALTER DATABASE.
SaveChanges, triggery a klauzule OUTPUT
Když EF Core uloží změny do databáze, provede to s optimalizovanou technikou pomocí klauzule T-SQL OUTPUT. Klauzule OUTPUT má bohužel určitá omezení; nelze ji použít zejména s tabulkami, které mají například triggery.
Pokud narazíte na omezení související s použitím klauzule OUTPUT, můžete ho zakázat v konkrétní tabulce prostřednictvím UseSqlOutputClause:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.UseSqlOutputClause(false));
}
Tím se ef přepne na starší a méně efektivní techniku pro aktualizaci tabulky.
Pokud většina nebo všechny tabulky obsahují triggery, můžete ho nakonfigurovat pro všechny tabulky modelu pomocí následující konvence vytváření modelu:
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);
}
}
}
}
To efektivně spustí UseSqlOutputClause pro všechny tabulky vašeho modelu, místo toho, abyste to museli provádět ručně pro každou tabulku.