C# 如何从使用Package Manager控制台迁移期间创建的AspNetUsers表中正确删除列?
我在identity的数据库中添加了一个新表,我想我搞砸了,因为现在在AspNetUsers表中,我有一个新列,它是我新表的外键,我不想在其中。 删除新列的最佳方法是什么 我就是这样开始的C# 如何从使用Package Manager控制台迁移期间创建的AspNetUsers表中正确删除列?,c#,asp.net-mvc,entity-framework,asp.net-identity-2,C#,Asp.net Mvc,Entity Framework,Asp.net Identity 2,我在identity的数据库中添加了一个新表,我想我搞砸了,因为现在在AspNetUsers表中,我有一个新列,它是我新表的外键,我不想在其中。 删除新列的最佳方法是什么 我就是这样开始的 public class ApplicationUser : IdentityUser { ... public virtual SuperAdminHistory SuperAdminHistory { get; set; } } 这是我的课 public
public class ApplicationUser : IdentityUser
{
...
public virtual SuperAdminHistory SuperAdminHistory { get; set; }
}
这是我的课
public class SuperAdminHistory
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SuperAdminHistoryID { get; set; }
public string SuperAdminIdCreator { get; set; }
public string CreatedAdminID { get; set; }
public string DateCreated { get; set; }
public string ModifiedBy { get; set; }
public string ModifiedDate { get; set; }
public bool IsActive { get; set; }
}
然后我将其添加到ApplicationDbContext:IdentityDbContext
public System.Data.Entity.DbSet<SuperAdminHistory> SuperAdminHistory { get; set; }
public System.Data.Entity.DbSet SuperAdminHistory{get;set;}
然后,当我进入包管理器控制台时
而且
添加迁移“NewTable”
然后
更新数据库
起初,我在尝试创建新表时犯了几个错误,因此我想知道以前的错误是否在我的AspNetUsers表中创建了外键
AspNetUsers表现在如下所示
我的新表现在在数据库中。正确的方法是编写适当的SQL脚本并应用于数据库
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_AspNetUsers_YOURKEYNAME]') AND parent_object_id = OBJECT_ID(N'[dbo].[AspNetUsers]'))
ALTER TABLE [dbo].[AspNetUsers] DROP CONSTRAINT [FK_AspNetUsers_YOURKEYNAME]
GO
alter table AspNetUsers
drop coulmn SuperAdminHistory_SuperAdminHistoryID
当您添加导航属性时,它将创建一个关系,EF将添加一个外键。如果您不想这样做,请执行以下操作:
[NotMapped]
public virtual SuperAdminHistory SuperAdminHistory { get; set; }
或者添加fluent映射:.Ignore(p=>p.SuperAdminHistory)
如果进行了更改并应用了迁移,则应删除该字段。另一个选项是回滚以前的迁移:
Update-Database -TargetMigration:"name_of_migration"
下次他运行迁移时,如果您不修复模型,它会立即将其添加回来。