7.2.3 Настройка наборов символов и сортировок в EF Core
В этом разделе описывается, как изменить набор символов, сортировку или оба параметра на уровне сущности и свойства сущности в модели Entity Framework (EF) Core. Внесенные в модель изменения влияют на таблицы и столбцы, сгенерированные из вашего кода.
Существует два различных подхода к настройке наборов символов и сортировок в сценариях кода-первый. Атрибуты данных позволяют применять атрибуты непосредственно к вашей модели EF Core. Кроме того, вы можете переопределить метод OnModelCreating в классе DbContext и использовать гибкий API кода-первый для настройки определенных характеристик модели. Ниже приведен пример каждого подхода.
Дополнительную информацию о поддерживаемых наборах символов и сортировках см. в .
Использование атрибутов данных
Прежде чем вы сможете аннотировать модель EF Core атрибутами набора символов и сортировки, добавьте ссылку на следующий пространство имен в файл, содержащий вашу модель сущности.
Пространство имен MySQL.EntityFrameworkCore.DataAnnotations относится к Connector/NET 8.0.23 и более поздним версиям. Более ранние версии коннектора требуют пространство имен MySQL.Data.EntityFrameworkCore.DataAnnotations.
using MySql.EntityFrameworkCore.DataAnnotations;
Добавьте один или несколько атрибутов [MySqlCharset] для хранения данных с использованием различных наборов символов и один или несколько атрибутов [MySqlCollation] для выполнения сравнений в соответствии с различными сортировками. В следующем примере класс ComplexKey представляет сущность (или таблицу), а Key1, Key2 и CollationColumn представляют свойства сущности (или столбцы).
[MySqlCharset("utf8")]
public class ComplexKey
{
[MySqlCharset("latin1")
public string Key1 { get; set; }
[MySqlCharset("latin1")]
public string Key2 { get; set; }
[MySqlCollation("latin1_spanish_ci")]
public string CollationColumn { get; set; }
}
Использование гибкого API кода-первый
Добавьте следующую директиву для ссылки на методы, связанные с настройкой наборов символов и сортировок.
Пространство имен MySQL.EntityFrameworkCore.Extensions относится к Connector/NET 8.0.23 и более поздним версиям. Более ранние версии коннектора требуют пространство имен MySQL.Data.EntityFrameworkCore.Extensions.
using MySQL.EntityFrameworkCore.Extensions;
При использовании подхода с гибким API модель EF Core остается неизменной. Гибкий API переопределяет любые правила, установленные атрибутом.
public class ComplexKey
{
public string Key1 { get; set; }
public string Key2 { get; set; }
public string CollationColumn { get; set; }
}
В этом примере сущность и различные свойства сущности перенастраиваются, включая стандартные сопоставления с наборами символов и сортировками. Этот подход использует методы ForMySQLHasCharset и ForMySQLHasCollation.
public class MyContext : DbContext
{
public DbSet<ComplexKey> ComplexKeys { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ComplexKey>(e =>
{
e.HasKey(p => new { p.Key1, p.Key2 });
e.ForMySQLHasCollation("ascii_bin"); // defining collation at Entity level
e.Property(p => p.Key1).ForMySQLHasCharset("latin1"); // defining charset in a property
e.Property(p => p.CollationColumnFA).ForMySQLHasCollation("utf8_bin"); // defining collation in a property
});
}
}
© 2025 Oracle
Licensed under the GPLv2 License.