0

Я использую первый подход сущностного кода в моем проекте. Я создал модель и включил миграции, используя оператор enable-migrations в консоли диспетчера пакетов. Мой контекст класс содержит конфигурации отображения и отношения, какМожно ли добавлять индексы, изменяющие начальную миграцию?

modelBuilder.Configurations.Add(new PostMap()); 
modelBuilder.Configurations.Add(new UserMap()); 

Up методу в моем миграции файлы 201302261054023_InitialCreate.cs содержит все определения таблицы, как указано мой контекст через DbSet < Типа > недвижимости.

Я изменил метод InitializeDatabase в своей пользовательской базе данных Initializer, потому что я хочу перейти к определенной миграции во время инициализации базы данных.

public void InitializeDatabase(T context) 
{ 
    bool databaseExists = context.Database.Exists(); 
    if (!databaseExists) 
     context.Database.CreateIfNotExists(); 

    var configuration = new Configuration(); 
    var migrator = new DbMigrator(configuration); 
    migrator.Update("InitialCreate"); 
} 

можно модифицировать Up метод в классе 201302261054023_InitialCreate, чтобы добавить еще один индекс из

CreateTable(
     "dbo.City", 
     c => new 
      { 
       Id = c.Int(nullable: false, identity: true), 
       Name = c.String(maxLength: 450), 
      }) 
     .PrimaryKey(t => t.Id); 

в

CreateTable(
     "dbo.City", 
     c => new 
      { 
       Id = c.Int(nullable: false, identity: true), 
       Name = c.String(maxLength: 450), 
      }) 
     .PrimaryKey(t => t.Id) 
     .Index(t=>t.Name,true); 

без добавления другой миграции?

ответ

5

После запуска большого количества веб-страниц, связанных с миграциями, я обнаружил, что изменение начальной миграции может помочь мне, только если я обновляю базу данных до «нулевой миграции» (пустая база данных). Без переноса на нулевую базу данных я мог бы добавить еще одну миграцию и создать индексы в новой миграции, например

public partial class InitialIndexes : DbMigration 
{ 
    public override void Up() 
    { 
     CreateIndex("City", "Name", true); 
    } 

    public override void Down() 
    { 
     DropIndex("City", new[] {"Name"}); 
    } 
} 
0

Чтобы создать индекс, вы можете использовать ExecuteSqlCommand.

context.Database.ExecuteSqlCommand("CREATE INDEX IX_TableName_ColumnName ON TableName (ColumnName)"); 

Обычно я использую эту команду в методе переопределения семян, как показано ниже.

  protected override void Seed(YourContext context) 
      { 
       context.Database.ExecuteSqlCommand("CREATE INDEX IX_TableName_ColumnName ON TableName (ColumnName)"); 
       //...Rest of seed code 
      } 

Вы должны иметь возможность использовать один и тот же вызов в своем методе.

+0

Gouber, благодарю вас за ответ. Мой вопрос не был описан надлежащим образом. Я хочу управлять индексами, используя миграции. Ваш подход должен быть функциональным, но только в ситуациях, когда база данных переносится в последнюю версию. Мне нужны индексы, которые должны быть созданы с базой данных, перенесенной в более раннюю, чем последняя версия. –