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

时间:2015-11-01 14:27:04

标签: c# asp.net-mvc entity-framework asp.net-identity-2

我在身份的数据库中添加了一个新表,我想我搞砸了,因为现在在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; }

然后我进入Package Manager控制台 并做了

  

添加迁移“NewTable”

则...

  

更新的数据库的

起初我在尝试创建一个新表时犯了一些错误,所以我想知道早期的错误是否在我的AspNetUsers表中创建了外键。

AspNetUsers表现在看起来像这样 AspNetUsers Table

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

添加导航属性时,会创建关系,EF会添加外键。如果您不想要,请执行:

[NotMapped]
public virtual SuperAdminHistory SuperAdminHistory { get; set; }

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

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

Update-Database -TargetMigration:"name_of_migration"