Как остановить EF4.1 Code-First для создания индекса Culstered для объекта PK - PullRequest
4 голосов
/ 28 апреля 2011

Используя следующий простой класс сущностей, EF4.1 Code-First создаст кластеризованный индекс для столбца PK UserId при инициализации базы данных.

    public class User
    {
        [Key]
        public int UserId { get; set; }
        public int AppId  { get; set; }
        public string UserName { get; set; }
    }

В целях повышения производительности мои цели разработки состоят в том, чтобы сгенерированная таблица Users была физически кластеризованной в соответствии с AppId подключением, а не PK.

В своем классе Initializer я пытался вручную удалить автоматически сгенерированный кластеризованный индекс PK и создать любой кластеризованный индекс, который мне нужен, но здесь нет подсказки, чтобы предсказать автоматически сгенерированное имя PK__Users__25518C17 для индекса!

Я новичок в мире Code-First, и действительно не знаю, есть ли обходной путь для моих целей проектирования.

Заранее спасибо

1 Ответ

5 голосов
/ 28 апреля 2011

Вам не нужно прогнозировать имя автоматически сгенерированного индекса.Вам просто нужно выбрать название индекса.Для SQL-сервера вы можете использовать запрос, например:

SELECT I.Name
FROM sys.indexes AS I
INNER JOIN sys.tables AS T ON
    I.object_Id = T.object_Id
WHERE I.is_primary_key = 1 
    AND T.Name = 'Users'

Получив имя в пользовательском инициализаторе, вы можете изменить старый индекс и создать новый.

...