EF CodeFirst создает некластеризованный индекс первичного ключа - PullRequest
9 голосов
/ 25 июля 2011

Я использую EF 4.1 CodeFirst для создания моей БД. Кажется, что EF создает все первичные ключи с кластеризованным индексом, что не является оптимальным для нас в одном случае (возможно, больше случаев). Есть ли способ сказать EF генерировать эту таблицу с первичным ключом как некластеризованный индекс?

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

Ответы [ 2 ]

13 голосов
/ 25 июля 2011

Нет, нет никакого способа управлять первым генерацией кода SQL - это сначала код, и его нынешняя философия (на самом деле плохая) такова: вы ничего не знаете о базе данных и не беспокоитесь.

Единственный способ изменить это поведение - написать собственный инициализатор базы данных, использовать пользовательские запросы к базе данных для поиска созданного индекса, удаления этого индекса и создания нового.Некоторые ссылки:

Инициализатор сделает ваше решение зависимым от конкретного продукта сервера баз данных.

9 голосов
/ 17 апреля 2013

Да, есть способ указать, что кластерные индексы не нужно создавать.Если вы используете миграцию кода, файл * .cs генерируется для заполнения вашей базы данных.В этом файле вы можете указать отдельно от первичного ключа для каждой таблицы, нужно ли его создавать с кластерными индексами.

  .PrimaryKey(t => t.MID, null, true)
...