Características de columna específicas del proveedor de SQL Server de Entity Framework Core
En esta página se detallan las opciones de configuración de columnas que son específicas del proveedor SQL Server.
Unicode y UTF-8
SQL Server 2019 introdujo compatibilidad con UTF-8, que permite almacenar datos UTF-8 en columnas char
y varchar
configurándolos con intercalaciones UTF-8 especiales. EF Core 7.0 introdujo compatibilidad completa para la asignación a columnas UTF-8, y también es posible usarlas en versiones anteriores de EF, con algunos pasos adicionales.
EF Core 7.0 incluye compatibilidad de primera clase con columnas UTF-8. Para configurarlos, basta con configurar el tipo de columna en char
o varchar
, especificar una intercalación UTF-8 (que termine con _UTF8
) y especificar que la columna debe ser Unicode:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Name)
.HasColumnType("varchar(max)")
.UseCollation("LATIN1_GENERAL_100_CI_AS_SC_UTF8")
.IsUnicode();
}
Columnas dispersas
Las columnas dispersas son columnas normales que tienen un almacenamiento optimizado para valores null, lo que reduce los requisitos de espacio para estos valores a costa de más sobrecarga para recuperar valores que no son null.
Por ejemplo, considere la posibilidad de asignar una jerarquía de tipos a través de la estrategia de tabla por jerarquía (TPH). En TPH, se usa una tabla de base de datos única para contener todos los tipos de una jerarquía; esto significa que la tabla debe contener columnas para cada propiedad de toda la jerarquía, y para las columnas que pertenecen a tipos poco frecuentes, la mayoría de las filas contendrán un valor null para esa columna. En estos casos, puede tener sentido configurar la columna como dispersa con el fin de reducir los requisitos de espacio. El usuario debe tomar la decisión de tomar una columna dispersa y depende de las expectativas de los datos reales de la tabla.
Una columna se puede hacer dispersa a través de la API de Fluent:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<RareBlog>()
.Property(b => b.RareProperty)
.IsSparse();
}
Para obtener más información sobre las columnas dispersas, consulte la documentación de SQL Server.