Как убрать регистрозависимость при получении данных из БД?
Использую 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
