EF CodeFirst создать не кластеризованный индекс первичных ключей

StackOverflow https://stackoverflow.com/questions/6813462

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

  .PrimaryKey(t => t.MID, null, true)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top