Как убрать регистрозависимость при получении данных из БД?

Использую EF Core и мне нужно получить запись по имени.

Запрос

    public async Task<T> GetAnimalByNameAsync(string animalName)
    {
        return await _dataContext.Set<T>()
            .Include(x => x.Breed)
            .FirstOrDefaultAsync(x => x.Name.Equals(animalName));
    }

Контекст БД

    public DbSet<Breed> AnimalBreeds { get; set; }

    public DbSet<AnimalEntity> Animals { get; set; }

    public DbSet<Food> Foods { get; set; }

    public DbSet<Cat> Cats { get; set; }

    public DbSet<Dog> Dogs { get; set; }

    public DbSet<Feeding> Feedings { get; set; }

    public DataContext(DbContextOptions<DataContext> options) : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.UseCollation("Latin1_General_CP1_CI_AS");
        modelBuilder.UseCollation("Cyrillic_General_CI_AS");

        modelBuilder.Entity<Breed>().Property(e => e.Type)
            .HasConversion(
            x => x.ToString(),
            v => (AnimalType)Enum.Parse(typeof(AnimalType), v));

        modelBuilder.Entity<Cat>().Property(e => e.Type)
            .HasConversion(
            x => x.ToString(),
            v => (AnimalType)Enum.Parse(typeof(AnimalType), v));

        modelBuilder.Entity<Dog>().Property(e => e.Type)
            .HasConversion(
            x => x.ToString(),
            v => (AnimalType)Enum.Parse(typeof(AnimalType), v));

        modelBuilder.Entity<Food>().Property(e => e.Type)
            .HasConversion(
            x => x.ToString(),
            v => (AnimalType)Enum.Parse(typeof(AnimalType), v));
    }

При создании миграции получаю исключение

введите сюда описание изображения

Базу данных использую Postgresql


Ответы (1 шт):

Автор решения: Uranus

В первую очередь, надо убедиться что вы правильно задаете имя Collation. Используйте следующий запрос для того чтобы получить список предустановленных Collation в вашей системе:

SELECT * FROM pg_collation

Во вторых, следует помнить, что поддержка регистро-независимых локалей появилась лишь в PostgreSQL 12. В старых версиях чтобы оперировать с данными игнорируя регистр следовало назначить колонке специальный тип citext.

public class Blog
{
    public int Id { get; set; }
    [Column(TypeName = "citext")]
    public string Name { get; set; }
}

Источники:
PostgreSQL: Collation Support
Entity Framework Core: Collations and case sensitivity, The citext type

→ Ссылка