Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
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.