3

我先使用EF 6 alpha 3代碼。 當我嘗試在運行Update-Database命令的SQL Azure上創建數據庫時,出現以下錯誤:使用EF 6 alpha3的代碼優先和遷移創建__MigrationHistory表時出現錯誤部署到SQL Azure

此版本的SQL Server不支持沒有聚集索引的表。請創建聚集索引並重試。

我跟蹤到__MigrationHistory表創建sql命令的錯誤。

CREATE TABLE [dbo].[__MigrationHistory] (
    [MigrationId] [nvarchar](255) NOT NULL, 
    [ContextKey] [nvarchar](512) NOT NULL, 
    [Model] [varbinary](max) NOT NULL, 
    [ProductVersion] [nvarchar](32) NOT NULL, 
    CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY NONCLUSTERED ([MigrationId], [ContextKey]) 
) 

任何人有任何想法,我該如何解決這個問題?

謝謝,

回答

13

這是阿爾法3 bug - 抱歉的不便。

有一個很簡單的解決方法:

1)創建一個自定義遷移SQL生成:

public class AzureSqlGenerator : SqlServerMigrationSqlGenerator 
{ 
    protected override void Generate(CreateTableOperation createTableOperation) 
    { 
     if ((createTableOperation.PrimaryKey != null) 
      && !createTableOperation.PrimaryKey.IsClustered) 
     { 
      createTableOperation.PrimaryKey.IsClustered = true; 
     } 

     base.Generate(createTableOperation); 
    } 
} 

2)註冊自定義生成您的遷移配置:

internal sealed class Configuration : DbMigrationsConfiguration<MyContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 

     SetSqlGenerator("System.Data.SqlClient", new AzureSqlGenerator()); 
    } 

    protected override void Seed(MyContext context) 
    { 
    } 
} 
+0

似乎以最新的比特來修復。謝謝!! – 2013-03-14 14:53:58

+1

它是否已在nuget包(alpha 3)中修復? – 2013-04-28 14:34:15

+1

仍然有nuget包的問題。另外,如果您在升級之前已經擁有__MigrationHistory表,那麼在您刪除表之前這將不起作用。我刪除了我的項目中的Migrations文件夾,並再次運行Enable-Migrations,然後添加SetSqlGenerator調用並且它工作。 – Tom 2013-05-21 13:57:26

相關問題