无法在 .NET 中的实体框架代码优先方法中迁移 AspNetUser 实体
Posted
技术标签:
【中文标题】无法在 .NET 中的实体框架代码优先方法中迁移 AspNetUser 实体【英文标题】:Cannot migrate AspNetUser entity in Entity Framework Code First Approach in .NET 【发布时间】:2016-09-05 23:59:12 【问题描述】:我正在使用 Visual Studio 2013 开发一个 ASP.NET MVC 项目。我正在使用实体框架代码优先方法与数据库进行交互。但是由于 ASP.NET 中的内置身份系统,我在迁移数据时遇到了问题。在我接触身份系统之前一切都很好。
这些是我已经完成的步骤。
我使用内置身份系统从 UI 注册了一个帐户。所以在数据库中创建了 AspNetUsers 表。
我为我的代码创建了 AspNetUser 类,因为我需要使用它。
然后我运行迁移和更新数据库命令。它会引发错误。
这是我的 AspNetUser 类
public class AspNetUser
[Required]
public String Id get; set;
[Required]
public String UserName get; set;
public String PasswordHash get; set;
public String SecurityStamp get; set;
[Required]
public String Discriminator get; set;
这是我的数据库上下文类
public class AyarDbContext : DbContext
public AyarDbContext()
: base("DefaultConnection")
public DbSet<Category> Categories get; set;
public DbSet<Region> Regions get; set;
public DbSet<Area> Areas get; set;
public DbSet<Item> Items get; set;
public DbSet<ItemContactInfo> ItemContacts get; set;
public DbSet<Gallery> Galleries get; set;
public DbSet<Mail> Mails get; set;
public DbSet<AspNetUser> AspNetUsers get; set;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
这是我得到的错误。
数据库中已经有一个名为“AspNetUsers”的对象。
如何迁移 AspNetUser 类?我使用 UI 注册,因为我自动创建身份系统所需的其他表。如何迁移该类并使用数据库中已存在的 AspNetUsers 表进行映射。
【问题讨论】:
【参考方案1】:正如错误所解释的,该表已经存在并且可以通过这种方式访问:
var user = context.Users.First(u => u.Id == myId);
如果你想扩展用户类并添加属性,你可以继承它:
public class MyAppUser : IdentityUser
// don't include properties already in IdentityUser
public string MyNewProperty get; set;
http://johnatten.com/2014/06/22/asp-net-identity-2-0-customizing-users-and-roles/
【讨论】:
也许,我可以在代码中访问用户。如果我将来必须再次更新我的模型怎么办?这个错误会再次出现在我身上。 是的,您可以使用如上所示的代码或使用用户管理器访问用户表。取决于你想要做什么。如果您只想添加其他属性,请继承并添加属性。如果您想重做密码散列或内部工作,这是一项重大的工作 (IMO) 不,在这种情况下,我无法使用迁移添加新实体,因为 AspNetUser 包含在迁移类文件中。 您不需要 AspNetUser 类。删除它和 DbSet。该表由 Identity 基类处理。明确您的需求。以上是关于无法在 .NET 中的实体框架代码优先方法中迁移 AspNetUser 实体的主要内容,如果未能解决你的问题,请参考以下文章