删除一个表并在代码中生成一个新表

本文关键字:一个 新表 删除 代码 | 更新日期: 2023-09-27 17:57:51

在一个新创建的MVC4 web项目中,我在服务器资源管理器中删除了一个表(鼠标右键点击DataConnections…),然后在Package Manager控制台(PMC)中运行

update-database -verbose -force

以在同一数据库中生成同名的新表。但是PMC只尝试了"ALTER"命令,这不是我希望它做的,它输出了一个错误

找不到对象"dbo.UserProfile",因为它不存在或您没有权限。

它现在怎么能解决这个问题?

更新

以下是UserProfile 类的数据模型

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string UserEmail { get; set; }
    [DefaultValue(false)]
    public bool IsActivated { get; set; }        
}

这是在配置文件的种子方法中初始化表的代码

    WebSecurity.CreateUserAndAccount("Administrator", "admin",
                new
                {                        
                    UserEmail = "admin@gmail.com",
                    IsActivated=true
                }                   
                );

删除一个表并在代码中生成一个新表

EF Migrations希望由您负责(您可以使用-Script选项让Migrations生成脚本,而不是直接运行DDL),或者由它负责。混合和匹配不起作用。

如果你知道UserProfile的结构(也许你保存了一个脚本?),你可以手动重新创建它,就像更改之前一样,然后允许EF迁移再次应用迁移。

如果您有适当的数据库备份,请恢复该备份并重试。

如果没有,您可以删除并重新创建数据库,然后进行初始迁移。

就我个人而言,我总是让EF迁移为迁移编写脚本(-script选项)。然后我自己应用脚本。这样,我就拥有了在QA和PROD环境中进行受控迁移所需的一切。我只是对EF Migrations没有足够的信任,无法让它自动迁移生产数据(并不是说迁移很糟糕,而是一个小错误可能会擦除生产数据。我不愿意冒这个风险。)