Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Opciones de Azure SQL Database
Note
Debe usar el UseAzureSql método en lugar de UseSqlServer al conectarse a Azure SQL.
Azure SQL Database proporciona una variedad de opciones de precios que normalmente se configuran a través de Azure Portal. Sin embargo, si administra el esquema mediante migraciones de EF Core, puede configurar las opciones deseadas con EF y se aplicarán cuando EF cree la base de datos.
Puede especificar el nivel de servicio de la base de datos (EDITION) mediante HasServiceTier:
modelBuilder.HasServiceTier("BusinessCritical");
Puede especificar el tamaño máximo de la base de datos mediante HasDatabaseMaxSize:
modelBuilder.HasDatabaseMaxSize("2 GB");
Puede especificar el nivel de rendimiento de la base de datos (SERVICE_OBJECTIVE) mediante HasPerformanceLevel:
modelBuilder.HasPerformanceLevel("BC_Gen4_1");
Use HasPerformanceLevelSql para configurar el grupo elástico, ya que el valor no es un literal de cadena:
modelBuilder.HasPerformanceLevelSql("ELASTIC_POOL ( name = myelasticpool )");
Tip
Puede encontrar todos los valores admitidos en la documentación de ALTER DATABASE.
SaveChanges, desencadenadores y la cláusula OUTPUT
Cuando EF Core guarda los cambios en la base de datos, lo hace con una técnica optimizada mediante la cláusula OUTPUT de T-SQL. Desafortunadamente, la cláusula OUTPUT tiene algunas limitaciones; en particular, no se puede usar con tablas que tengan desencadenadores, por ejemplo.
Si se encuentra con una limitación relacionada con el uso de la cláusula OUTPUT, puede deshabilitarla en una tabla específica a través de UseSqlOutputClause.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.ToTable(tb => tb.UseSqlOutputClause(false));
}
Esto hará que EF cambie a una técnica más antigua y menos eficaz para actualizar la tabla.
Si la mayoría o todas las tablas tienen desencadenadores, puede configurarlo para todas las tablas del modelo mediante la siguiente convención de creación 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);
}
}
}
}
De este modo, se accede a todas las tablas del modelo UseSqlOutputClause, en lugar de tener que hacerlo manualmente para cada una de ellas.