【问题标题】:Error deploying to SQL Azure using EF 6 alpha3 Code First and Migrations creating __MigrationHistory table使用 EF 6 alpha3 Code First 和迁移创建 __MigrationHistory 表部署到 SQL Azure 时出错
【发布时间】:2015-07-03 14:24:48
【问题描述】:

我首先使用的是 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])
)

有人知道我该如何解决这个问题吗?

谢谢,

【问题讨论】:

    标签: entity-framework azure-sql-database entity-framework-6


    【解决方案1】:

    这是 Alpha 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)
        {
        }
    }
    

    【讨论】:

    • 它似乎已在最新版本中修复。谢谢!!
    • 是否已在 nuget 包(alpha 3)中修复?
    • 仍然有来自 nuget 包的问题。此外,如果您在升级之前已经拥有 __MigrationHistory 表,则在您删除该表之前这将不起作用。我删除了项目中的 Migrations 文件夹并再次运行 Enable-Migrations,然后添加了 SetSqlGenerator 调用,它工作了。
    • 这似乎在 6.0.0-beta1 中解决了,因为我遇到了问题,然后更新(到 6.0.0-beta1),一切正常。
    • Tom 的 _MigrationHistory 表不错!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多