C# 如何从使用Package Manager控制台迁移期间创建的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

我在identity的数据库中添加了一个新表,我想我搞砸了,因为现在在AspNetUsers表中,我有一个新列,它是我新表的外键,我不想在其中。 删除新列的最佳方法是什么

我就是这样开始的

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"

下次他运行迁移时,如果您不修复模型,它会立即将其添加回来。