删除一个表并在代码中生成一个新表
本文关键字:一个 新表 删除 代码 | 更新日期: 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没有足够的信任,无法让它自动迁移生产数据(并不是说迁移很糟糕,而是一个小错误可能会擦除生产数据。我不愿意冒这个风险。)