如何从 AspNetUsers table 中正确删除在使用程序包管理器控制台迁移期间创建的列?

How to properly remove a column from AspNetUsers table that was created during a migration with Package Manager Console?

我在身份数据库中添加了一个新的 table,我想我搞砸了,因为现在在 AspNetUsers table 我有一个新列,它是我的新 [=36] 的外键=] 而且我不想在里面放那个。 删除该新列的最佳方法是什么?

我就是这样开始的

public class ApplicationUser : IdentityUser
    {
        ...
        public virtual SuperAdminHistory SuperAdminHistory { get; set; }
    }

这是我的class

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; }

然后我进入包管理器控制台 并且

Add-Migration "NewTable"

然后...

Update-Database

起初我在尝试创建新的 table 时犯了几个错误,所以我想知道之前的错误是否在我的 AspNetUsers table.

中创建了外键

AspNetUsers table 现在看起来像这样

我的新 table 现在在数据库中。

正确的方法是编写适当的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; }

或添加流畅的映射:.Ignore(p => p.SuperAdminHistory);

如果您进行更改并应用迁移,它应该删除该字段。另一种选择是回滚之前的迁移:

Update-Database -TargetMigration:"name_of_migration"