我有一个名为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,而且它没有更新数据库。有人能告诉我如何解决这个问题,并成功地更新我的数据库吗?还请注意,我过去常常创建大量的迁移并进行大量的数据库更新,然后我从项目中删除了我的迁移。这些可能是导致问题的原因。我不知道是否有重置上次迁移的命令。
发布于 2014-09-03 05:05:43
找到后: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有一个重命名功能,这可能是你和我有这个问题的原因。
发布于 2014-09-03 04:35:11
我也有同样的问题。
我尝试编写一个drop/create index,但这要求包含数据类型,我不确定如何做到这一点。(还没有看过)
要回答您的最后一个问题,您可以通过从要更新的数据库的_migrationhistory表中删除记录来“重置”迁移。
当迁移开始时,它会检查该表,以了解应用的上一次迁移是什么。因此,如果它是空的,它会将您当前的迁移作为初始迁移运行。
https://stackoverflow.com/questions/25253341
复制相似问题