Start Debugging

Тег: sql-server

18 статей · Страница1из2

Как экранировать подстановочные символы % и _ в запросах с EF.Functions.Like и StartsWith в EF Core 11
StartsWith, EndsWith и Contains в EF Core 11 уже сами экранируют % и _, а EF.Functions.Like этого не делает. Разбираем SQL, который генерирует EF, переиспользуемый помощник для экранирования и перегрузку с escapeCharacter, благодаря которой всё работает в SQL Server, SQLite и PostgreSQL.
Нативный столбец json или nvarchar(max) для хранения JSON в SQL Server с EF Core 11
Используйте нативный тип json в SQL Server 2025 и Azure SQL: благодаря ему EF Core 11 получает JSON_CONTAINS, типизированный JSON_VALUE, обновление на месте через modify() и JSON-индексы. Оставайтесь на nvarchar(max) для SQL Server 2019/2022, устаревших инструментов или схемы, которую нужно уметь откатить.
Как использовать пессимистичную блокировку с UPDLOCK и SELECT ... FOR UPDATE в EF Core 11
В EF Core 11 по-прежнему нет API блокировок. Разбираем, как взять настоящую блокировку строки через FromSql: WITH (UPDLOCK, ROWLOCK) в SQL Server, FOR UPDATE в PostgreSQL, ловушка с подзапросом, которая молча расширяет блокировку, NOWAIT и SKIP LOCKED, повторы при дедлоках и что делать, когда строки ещё нет.
Исправление: CREATE DATABASE permission denied in database 'master' при запуске dotnet ef database update
Migrate() в EF Core всегда проверяет наличие базы данных и создаёт её через жёстко зашитое подключение к master. Выдайте CREATE ANY DATABASE, почините доступ логина к существующей базе или выпускайте идемпотентный SQL-скрипт.
Как генерировать первичный ключ из последовательности базы данных при вставке в EF Core 11
Переводим ключ с IDENTITY на последовательность SQL Server в EF Core 11 через UseSequence: точный SQL, который выдаёт EF, почему явные значения ключа вдруг работают без IDENTITY_INSERT, последовательность bigint для колонки int и пропуски, которые нужно закладывать в проект.
Как вызвать хранимую процедуру и отобразить её результаты в EF Core 11
Используйте FromSql на DbSet, когда процедура возвращает полные строки сущности, Database.SqlQuery<T> при проекции и ExecuteSql, когда она не возвращает ничего. Никогда не присоединяйте оператор LINQ к EXEC и не читайте выходной параметр до того, как ридер будет освобождён.
Как переименовать таблицу в миграции EF Core 11 без потери данных
EF Core генерирует RenameTable, когда вы меняете имя таблицы, но DropTable плюс CreateTable, когда вы переименовываете класс сущности. Здесь разобрано, как различать эти два случая, приём с ToTable, который делает переименование класса бесплатным, и баг переименования столбцов, который молча меняет ваши данные местами.
Как реализовать оптимистичную конкурентность с токеном rowversion в EF Core 11
Добавляем токен конкурентности rowversion в EF Core 11: настройка через [Timestamp] и IsRowVersion, SQL, который EF действительно генерирует, перехват DbUpdateConcurrencyException, побеждает база vs побеждает клиент vs слияние, отсоединённые API с ETag и пять ловушек, которые молча отключают всю защиту.
Как мапить и запрашивать JSON-столбцы в EF Core 11
Сопоставьте вложенный тип с одним JSON-столбцом через ComplexProperty(...).ToJson(), позвольте EF Core 11 хранить его в нативном типе json SQL Server 2025, а затем запрашивайте его с помощью LINQ, который транслируется в JSON_VALUE, JSON_CONTAINS и JSON_PATH_EXISTS.
Вперёд