实体框架不接受聚集索引属性

本文关键字:索引 属性 聚集 不接受 框架 实体 | 更新日期: 2023-09-27 18:12:33

我在EF模型中有一个类:

public class Comment
        {
        public string CommentId { get; set;}
        public string TextMarkdown { get; set;}
        public string TextHtml { get { return new Markdown().Transform(TextMarkdown); } }
        public DateTime DateCreated { get; set; }
        public DateTime DateModified { get; set; }
        public int BlogId { get; set;}
        public virtual Blog BlogOwner { get; set; }
        }

我把我的class改成了:

public class Comment
        {
        public int CommentId { get; set;}
        public string TextMarkdown { get; set;}
        public string TextHtml { get { return new Markdown().Transform(TextMarkdown); } }
        public DateTime DateCreated { get; set; }
        public DateTime DateModified { get; set; }
        public int BlogId { get; set;}
        public virtual Blog BlogOwner { get; set; }
        }

我正在使用代码优先迁移。我发出了这些命令:

add-migration "Changed CommentId to int"

- database就

update database命令失败,报错

不支持没有聚集索引的表SQL服务器。请创建集群索引,然后重试。

所以我在我的CommentId属性上添加了一个Index属性。我删除了上一次迁移,再次发出添加迁移和更新数据库命令。

public class Comment
        {
        [Index(IsClustered = true)]
        public int CommentId { get; set;}
        //rest of class omitted for brevity
        }

但是我得到了相同的错误。我做错了什么?下面是我的迁移代码:

public override void Up()
        {
            DropPrimaryKey("dbo.Comments");
            AlterColumn("dbo.Comments", "CommentId", c => c.Int(nullable: false, identity: true));
            AddPrimaryKey("dbo.Comments", "CommentId");
            CreateIndex("dbo.Comments", "CommentId", clustered: true);
        }

背景:我使用的是EF 6.1.1和Azure托管的SQL Server数据库。

实体框架不接受聚集索引属性

在Comment_Blog关系上需要一个聚集索引。在azure中,所有表都必须具有聚集索引(技术上可以拥有它们,但不用于正常使用)。确认/检测这一点的一种方法是部署到本地SQL数据库。然后你可以运行这里提到的脚本:sql 2008中没有索引的表列表,以找到没有索引的表。

在创建Comments表之前,我最终迁移到了数据库的一个版本。然后我创建了一个新的迁移,这样当表被创建时,CommentId将是一个整型而不是字符串。

我猜做事的顺序引起了问题。好在我的数据库中没有实时数据,否则我就会丢失它。