подставлял как строку, а не как число?
Например context.Table.FromSql($"select {enumValue}...")
enumValue надо подставить как строку, а не как число
.ToString
ну это костыль к сожалению, должен быть нормальный способ задать конвертер
А что делает Select {enumValue}? Во что это превратиться должно?
Неважно на самом деле, что делает Select. Это просто пример. Моя задача заставить EF Core забиндить enum как строку в raw sql, а что там за sql не так важно. Причем когда пишешь code first все эти конвертеры https://learn.microsoft.com/en-us/ef/core/modeling/value-conversions?tabs=data-annotations успешно работают, а когда используешь raw sql - то нет.
это явно не так, потому что EF Core под капотом генерирует sql с биндами, а не подставляет бинды в строку интерполяцией
Откуда инфа такая? Покажите весь код был не прав
Если хотите без биндов raw собирать, то советую SqlKata
Результат компиляции запроса в . ToString() дает чистый запрос
await using var context = await _contextFactory.CreateDbContextAsync(); var result = await context.Table.FromSql(@$" select * from tab where status = {status}") .ToArrayAsync(); исключение: Failed executing DbCommand (100ms) [Parameters=[p0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30'] select * from table where status = @p0 как видишь статус превратился в бинд p0 если еще посмотреть исходники FromSql, видно, что там непросто string, а специальный класс FormattableString
Вы в БД получается строки храните, а не числа от enum'ов?
да, я уже убедился, сорян, не прав был
Это сделано специально как защита от инъекций
ну это понятное дело, но мой вопрос о другом же)
Я в свое время не стал разбираться и просто в отдельной переменной писал string value = enum.ToString(). Просто и работает и не тратит времени на размышления
Вариант рабочий, просто странно, что нет универсального способа.
Костыль это enum представлять в виде строки
потому что это число?
Это в рантайме C# enum реализован как число, но это не значит, что все enum везде должны быть числами.
Удобно читать БД где вместо Male и Female у тебя 0 и 1?
А ты часто читаешь дампы бд?
Ну да, я часто лезу в бд
Да, никто не мешает сделать свою админ панель с CRUD к дб где это будет выпадающим списком/текстом
зачем мне делаю свою админ панель с crud, когда есть datagrip например
Ну так а в чем проблема?
В том что в датагрипе это будут числа
И? Если ты так часто лазишь в дб, то в чем проблема запомнить
Если я порядок значений в енаме поменяю, у меня десериализация сломается.
1) Зачем менять порядок значений? 2) можно переопределить числа и сохранить сериализацию)
1. Ну при рефакторинге мало ли захочется. 2. Надо не забыть переопределить числа.
Давай я тебе скину все наши енамы и на 10к поспорим, что ты за неделю их выучишь?
Если тебе хочется менять порядок значений так часто, то тут уже проблема в тебе
Просто нужно сразу задавать числа и всё, тогда меняйте порядок как хотите
Не буду спорить, возможно у вас так) Я в дб не лазю часто, энумов у меня парочка. А на админ панели в браузере они в виде dropdown при редактировании так что удобно.
Обсуждают сегодня