MVC 5 EF - 尝试更改表名时出错

时间:2018-03-17 03:49:07

标签: c# asp.net-mvc entity-framework ef-code-first ef-migrations

我有一个名为“Ciudad”的班级。当我想添加迁移来创建数据表时,EF使用名称“dbo.Ciudads”。我实际上希望这个名字是“Ciudades”(附加'e'),所以我手动改变它。

更新数据库后,表dbo.Ciudades已成功创建。我甚至创建了一个小脚本来填充它,它运行正常。

但是,当我想从上下文中查询“Ciudades”时,我得到一个例外,因为它试图查询实际上不存在的表“dbo.Ciudads”(没有附加的“e”)。这是 InvalidOperationException:“自创建数据库以来,支持'ApplicationDbContext'上下文的模型已更改”

所以我运行了“add-migration foo”并生成以下迁移:

public partial class foo : DbMigration
{
    public override void Up()
    {
        RenameTable(name: "dbo.Ciudads", newName: "Ciudades");
    }

    public override void Down()
    {
        RenameTable(name: "dbo.Ciudades", newName: "Ciudads");
    }
}

这看起来很奇怪,因为在我的数据库中,我确实按照我想要的名称使用“Ciudades”。然而,当我尝试使用此迁移更新数据库时,我得到以下异常:

  

System.Data.SqlClient.SqlException(0x80131904):参数@objname不明确或声明的@objtype(OBJECT)错误。

我想我得到了这个例外,因为表“Ciudads”不存在。我是对的吗?

如果是这样,它从哪里获得该表?我在整个解决方案上搜索了“ciudads”这个词,但没有出现。

3 个答案:

答案 0 :(得分:1)

感谢@IvanStoev的解决方案。

问题是我在生成的迁移类中手动更改了表名。后来我使用了FluentAPI来指定名称" Ciudades"但是到了晚了。 根据@IvanStoev的建议,我删除了所有内容并再次创建了迁移,但这次是在创建迁移之前使用FluentAPI。然后使用我想要的名称生成该表,现在一切正常。

答案 1 :(得分:0)

您可以使用此方法。

 public override void Up()
{
    RenameTable("dbo.Ciudads", "Ciudades");
}

public override void Down()
{
    RenameTable("dbo.Ciudades", "Ciudads");
}

或者 如果要指定表名。您可以使用流畅的API。

modelBuilder.Entity<Department>().ToTable("t_Department"); 

答案 2 :(得分:-1)

下载微软SQL服务器管理工​​作室dev版本可能值得。