Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Opções do banco de dados SQL do Azure
Note
Você deve usar o método UseAzureSql em vez de UseSqlServer ao se conectar ao Azure SQL.
O Banco de Dados SQL do Azure fornece uma variedade de opções de preços que geralmente são configuradas por meio do Portal do Azure. No entanto, se você estiver gerenciando o esquema usando migrações do EF Core, poderá configurar as opções desejadas com o EF e elas serão aplicadas quando o EF criar o banco de dados.
Você pode especificar a camada de serviço do banco de dados (EDITION) usando HasServiceTier:
modelBuilder.HasServiceTier("BusinessCritical");
Você pode especificar o tamanho máximo do banco de dados usando HasDatabaseMaxSize:
modelBuilder.HasDatabaseMaxSize("2 GB");
Você pode especificar o nível de desempenho do banco de dados (SERVICE_OBJETIVE) usando HasPerformanceLevel:
modelBuilder.HasPerformanceLevel("BC_Gen4_1");
Use HasPerformanceLevelSql para configurar o pool elástico, já que o valor não é um literal de string:
modelBuilder.HasPerformanceLevelSql("ELASTIC_POOL ( name = myelasticpool )");
Tip
Você pode encontrar todos os valores suportados na documentação ALTER DATABASE.
SaveChanges, triggers e a cláusula OUTPUT
Quando o EF Core guarda alterações na base de dados, faz-no com uma técnica otimizada usando a cláusula de saída T-SQL. Infelizmente, a cláusula OUTPUT tem algumas limitações; Notavelmente, não pode ser usado com tabelas que tenham gatilhos, por exemplo.
Se encontrar uma limitação relacionada com o uso da cláusula OUTPUT, pode desativá-la numa tabela específica utilizando UseSqlOutputClause:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.UseSqlOutputClause(false));
}
Fazer isto fará com que o EF mude para uma técnica mais antiga e menos eficiente para atualizar a tabela.
Se a maioria ou todas as suas tabelas tiverem triggers, pode configurar isto para todas as tabelas do seu modelo usando a seguinte convenção de construção de modelos:
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);
}
}
}
}
Isso efetivamente chama UseSqlOutputClause em todas as tabelas do seu modelo, em vez de ter que fazê-lo manualmente para cada uma.