Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opties voor Azure SQL-databases
Note
U moet de UseAzureSql methode gebruiken in plaats van wanneer u verbinding maakt met Azure SQL.
Azure SQL Database biedt verschillende prijsopties die doorgaans worden geconfigureerd via Azure Portal. Als u echter het schema beheert met EF Core-migraties, kunt u de gewenste opties configureren met EF en worden ze toegepast wanneer EF de database maakt.
U kunt de servicelaag van de database (EDITION) opgeven met behulp van HasServiceTier:
modelBuilder.HasServiceTier("BusinessCritical");
U kunt de maximale grootte van de database opgeven met behulp van HasDatabaseMaxSize:
modelBuilder.HasDatabaseMaxSize("2 GB");
U kunt het prestatieniveau van de database (SERVICE_OBJECTIVE) opgeven met behulp van HasPerformanceLevel:
modelBuilder.HasPerformanceLevel("BC_Gen4_1");
Gebruik HasPerformanceLevelSql om de elastische pool te configureren, omdat de waarde geen letterlijke tekenreeks is:
modelBuilder.HasPerformanceLevelSql("ELASTIC_POOL ( name = myelasticpool )");
Tip
U vindt alle ondersteunde waarden in de documentatie voor ALTER DATABASE.
SaveChanges, triggers en de OUTPUT-clausule
Wanneer EF Core wijzigingen in de database opslaat, gebeurt dit met een geoptimaliseerde techniek met behulp van de T-SQL OUTPUT-component. Helaas heeft de OUTPUT-component enkele beperkingen; het kan met name niet worden gebruikt met tabellen die bijvoorbeeld triggers hebben.
Als u een beperking hebt met betrekking tot het gebruik van de OUTPUT-component, kunt u deze uitschakelen voor een specifieke tabel via UseSqlOutputClause:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.UseSqlOutputClause(false));
}
Hierdoor wordt EF overgeschakeld naar een oudere, minder efficiƫnte techniek voor het bijwerken van de tabel.
Als de meeste of alle tabellen triggers hebben, kunt u dit configureren voor alle tabellen van uw model met behulp van de volgende modelbouwconventie:
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);
}
}
}
}
Dit roept UseSqlOutputClause in feite alle tabellen van uw model aan, in plaats van dat u dit handmatig moet doen voor elke en elke tabel.