Как программно перестроить все индексы в коде первыми (C# и EntityFrameworkCore) создали SQL серверные таблицы после вставки большого набора данных - PullRequest
0 голосов
/ 04 марта 2020

У меня есть код, сначала создайте таблицу базы данных, которую я усекаю и вставляю примерно 12000 записей с помощью скрипта c# и Entity Framework Core 2.2.6.

У меня есть 5 индексов в таблице, которые мне нужны воссоздать после того, как я сделаю свою работу с базой данных. Конечно, я могу делать это вручную каждый раз после запуска сценария, но, будучи программистом, это кажется странным.

Я пытался найти способ сделать это с EntityFrameworkCore, но, похоже, не могу его найти.

В качестве последнего средства я, конечно, могу выполнить команду SQL, но мне было интересно, есть ли какая-то функциональность EntityFrameworkCore, которую я пропускаю.

Или есть другие способы сделать это более эффективно?

edit:

Я запускаю свой сценарий каждый раз, когда я получаю новую БД от третьей стороны, чтобы создать свою собственную из нее, которая сейчас находится в разработке, примерно каждый месяц, позже, когда будет будь меньше, так что вручную это вариант, но у меня аллергия на ручную работу

1 Ответ

0 голосов
/ 05 марта 2020

Я закончил тем, что использовал хранимую процедуру, которая выполняет следующие действия, взятые из здесь

DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 80 
DECLARE TableCursor CURSOR FOR
SELECT QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))+'.' + QUOTENAME(name) AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
GO
...