EF Core говорит postgres с типом данных citext - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужна помощь.
Я работаю
. NET Core 3.1
Npg sql .EntityFrameworkCore. PostgreSQL 3.1.2
Microsoft.EntityFrameworkCore.Tools 3.1. 2
против postgres дБ
PostgreSQL 11,5

Мы перешли с MS SQL на postgres, и ранее этот код работал:

_context.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailadress);
* 1011 С учетом вышесказанного, теперь данные чувствительны к регистру и, например, сравнение "john. doe@mail.com" с "John. Doe@mail.com" перестало работать. Можно изменить все на младшие строки, но поскольку таких сравнений много, потребуется некоторое время, чтобы это изменить.
Тогда я нашел цитату для спасения, подумал я.
Я изменил таблица / столбец, а затем есть сущность. net Я немного не уверен, как исправить.

Я пытался добавить к сущности, основываясь на этой ссылке: https://www.npgsql.org/efcore/mapping/general.html?tabs=data-annotations

[Column(TypeName = "citext")]
public string EmailAddress { get; set; }

, но это не помогло. Я нахожу это в журналах:
Выполнение DbCommand [Parameters = [@__ emailadress_0 = '?'], CommandType = 'Text', CommandTimeout = '30 ']
И я не знаю, стоит ли ожидать CommandType = 'citext' здесь или нет.

У кого-нибудь есть какие-либо замечания по этому поводу?
Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Пользователь, который использовал для подключения к базе данных Postgres, не имел схемы по умолчанию. Используемые данные / таблицы не существовали в схеме по умолчанию, установленной для базы данных. После того, как предпочтительная схема / схема по умолчанию была установлена ​​для пользователя, используемого для подключения к базе данных, сравнение citext начало работать.

    ALTER ROLE myUser IN DATABASE myDatabase SET search_path TO mySchema;
0 голосов
/ 03 мая 2020

Убедитесь, что к вашей базе данных применена новая миграция с таким изменением типа.

Еще одна вещь, которую необходимо учитывать, - это сопоставление, используемое вашей базой данных. Я думаю, что сразу после перехода с MS SQL на Postgre сопоставление не сохранилось.

...