实体框架不接受聚集索引属性
本文关键字:索引 属性 聚集 不接受 框架 实体 | 更新日期: 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将是一个整型而不是字符串。
我猜做事的顺序引起了问题。好在我的数据库中没有实时数据,否则我就会丢失它。