我的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; }
}
我把课程改为:
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; }
}
我正在使用Code First迁移。我发出了这些命令:
add-migration“将CommentId更改为int”
更新的数据库
update database命令失败并显示错误
此版本的版本不支持没有聚簇索引的表 SQL Server。请创建聚簇索引,然后重试。
所以我在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数据库。
答案 0 :(得分:0)
您需要在Comment_Blog关系上使用聚簇索引。在azure中,所有表必须具有聚簇索引(从技术上讲,您可以拥有它们,但不能用于正常使用)。确认/检测此问题的一种方法是部署到本地SQL数据库。然后,您可以运行此处提到的脚本:list of tables without indexes in sql 2008以查找没有索引的表。
答案 1 :(得分:0)
我在创建“注释”表之前最终迁移到了数据库的一个版本。然后我创建了一个新的迁移,以便在创建表时,CommentId将是一个int而不是一个字符串。
我想有关事情的顺序导致问题。好的事我没有在我的数据库中有实时数据,或者我会丢失它。