使用EF 6 alpha3 Code First和遷移創建__MigrationHistory表時,部署到SQL Azure時出錯

azure-sql-database entity-framework entity-framework-6

我首先使用的是EF 6 alpha 3代碼。當我嘗試在運行Update-Database命令的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])
)

任何人都知道如何解決這個問題?

謝謝,

一般承認的答案

這是Alpha 3中的一個錯誤 - 很抱歉給您帶來不便。

有一個非常簡單的解決方法:

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)在遷移配置中註冊自定義生成器:

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

        base.Generate(createTableOperation);
    }
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因