如何从 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"
我在身份数据库中添加了一个新的 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"