我有一个名为Category的模型,你可以在下面找到它的定义:
public class Category
{
[Key]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public virtual ICollection<Subcategory> Subcategories { get; set; }
}
子类别是我的另一个模型,它以类似的方式定义。之后,我使用这个模型创建了一个新的控制器,并将控制器命名为CategoriesController。然后我运行命令:Add-Migration Categories
,它创建了这个:
public partial class Categories : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.Services", "Category_CategoryID", "dbo.Categories");
DropIndex("dbo.Services", new[] { "Category_CategoryID" });
RenameColumn(table: "dbo.Services", name: "Subcategory_SubcategoryID", newName: "SubcategoryID");
RenameIndex(table: "dbo.Services", name: "IX_Subcategory_SubcategoryID", newName: "IX_SubcategoryID");
AddColumn("dbo.Subcategories", "CategoryID", c => c.Int(nullable: false));
CreateIndex("dbo.Subcategories", "CategoryID");
AddForeignKey("dbo.Subcategories", "CategoryID", "dbo.Categories", "CategoryID", cascadeDelete: true);
DropColumn("dbo.Services", "Category_CategoryID");
}
public override void Down()
{
AddColumn("dbo.Services", "Category_CategoryID", c => c.Int(nullable: false));
DropForeignKey("dbo.Subcategories", "CategoryID", "dbo.Categories");
DropIndex("dbo.Subcategories", new[] { "CategoryID" });
DropColumn("dbo.Subcategories", "CategoryID");
RenameIndex(table: "dbo.Services", name: "IX_SubcategoryID", newName: "IX_Subcategory_SubcategoryID");
RenameColumn(table: "dbo.Services", name: "SubcategoryID", newName: "Subcategory_SubcategoryID");
CreateIndex("dbo.Services", "Category_CategoryID");
AddForeignKey("dbo.Services", "Category_CategoryID", "dbo.Categories", "CategoryID", cascadeDelete: true);
}
}
最后,在我的配置文件中,我添加了以下代码行:
var categories = new List<Category>
{
new Category { CategoryName = "Sport" },
new Category { CategoryName = "Music" }
};
categories.ForEach(c => context.Categories.AddOrUpdate(p => p.CategoryName, c));
context.SaveChanges();
最后,我运行Update-Database
命令来更新我的数据库,并使用此名称创建一个新表。但不幸的是,我收到错误消息RenameIndexOperation
,并且它没有更新数据库。有人能告诉我如何解决这个问题,并成功更新我的数据库?还请注意,我曾经创建了大量的迁移并进行了大量的数据库更新,然后我确实从项目中删除了我的迁移。这些可能会导致问题。我不知道是否有任何命令可以重置我上次的迁移。
答案 0 :(得分:1)
我遇到了同样的问题。
我尝试编写drop / create索引,但这要求包含数据类型,我不确定如何做到这一点。 (还没看好)
要回答您的上一个问题,您可以&#34;重置&#34;通过删除您尝试更新的数据库的_migrationhistory表中的记录来进行迁移。
迁移开始时,它会检查该表以了解上次迁移的内容。因此,如果它为空,它将作为初始迁移运行您当前的迁移。
答案 1 :(得分:1)
找到后:How do I rename an Index in MySQL 用于在各种mysql版本中重命名索引。
然后发现你可以用你自己的sql改变迁移:
using System;
using System.Data.Entity.Migrations;
public partial class createdbyemployeerename : DbMigration
{
public override void Up()
{
Sql(@"SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE tbl DROP INDEX index_name;
ALTER TABLE tbl ADD INDEX new_index_name (indexed_column);");
}
}
希望有所帮助。
MySql服务器版本是5.6所以我必须像上面那样做。 5.7有一个重命名功能,这可能就是你让我遇到这个问题的原因。