0

我正在开发使用Visual Studio 2013的ASP.NET MVC项目。我正在使用实体框架代码优先方法与数据库进行交互。但是由于ASP.NET中的内置身份系统,我在迁移数据时遇到了问题。在我接触身份系统之前,一切都很好。无法迁移实体框架中的AspNetUser实体.NET代码优先方法

这些是我所做的步骤。

  1. 我使用内置身份系统从UI注册了一个帐户。所以AspNetUsers表是在数据库中创建的。

  2. 我为我的代码创建了AspNetUser类,因为我需要使用它。

  3. 然后我运行迁移和更新数据库命令。它会抛出错误。

这是我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类?我使用用户界面注册,因为我自动创建其他表需要身份系统。我如何迁移该类,并使用已存在于数据库中的AspNetUsers表进行映射。

回答

0

由于错误解释,该表已经存在,并且以这种方式访问​​:

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/

+0

也许,我可以在代码中访问用户。如果我不得不在未来再次更新我的模型会怎么样?那个错误会再次出现在我身上。 –

+0

是的,您可以使用上面显示的代码或用户管理器访问用户表。取决于你想要做什么。如果你只是想添加其他属性继承和添加属性。如果您想重做密码散列或内部结构是一项重大努力(IMO) –

+0

否我不能在这种情况下使用迁移添加新实体,因为AspNetUser包含在迁移类文件中。 –

相关问题