2016-08-19 62 views
0

我需要创建一个多列索引,像这样:运行自定义脚本后,每代码优先迁移

CREATE NONCLUSTERED INDEX [IX_UserName_Inc_LastOnline_Lat_Long] ON [dbo].[User] 
(
    UserName ASC 
) 
Include (LastOnline, Latitude, Longitude) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
GO 

我已经找到一些方法来做到这一点,但没有什么突出的一种方式得到完全上面的。有没有办法将自定义SQL作为迁移的一部分,而无需手动执行add-migration并在其中添加代码?

回答

0

我决定来运行这个作为我Seed()方法的一部分:

protected override void Seed(AppContext context) { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<AppContext, Configuration>()); 

     if (!WebSecurity.Initialized) { 
      WebSecurity.InitializeDatabaseConnection("DefaultConnection", "User", "UserId", "Username", autoCreateTables: true); 
     } 

     context.Database.ExecuteSqlCommand(
      "IF NOT EXISTS(SELECT * FROM sys.indexes WHERE name = 'IX_UserName_Inc_LastOnline_Lat_Long') " + 
      "BEGIN " + 
      " CREATE NONCLUSTERED INDEX [IX_UserName_Inc_LastOnline_Lat_Long] ON [dbo].[User] " + 
      " (UserName ASC) " + 
      " Include (LastOnline, LocationLat, LocationLong) " + 
      " WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) " + 
      "END" 
     ); 

     base.Seed(context); 
    }