代码优先迁移-子类需要Id字段



我有一个标准的MVC 5项目在VS 2013和使用内置的身份提供程序。我正在尝试根据http://blogs.msdn.com/b/webdev/archive/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates.aspx自定义用户配置文件。

我没有像文章中那样对ApplicationUser进行扩展,因为我想在相同解决方案的另一个项目中对扩展进行工作。我创建了一个新的子类ExtendedUser:

public class ExtendedUser : IdentityUser
{
    [MaxLength(12)]
    public string PIN { get; set; }
}

我有:

public class UsersContext : DbContext
{
    public DbSet<ExtendedUser> ExtendedUsers { get; set; }
    public UsersContext() : base() { }
    public UsersContext(string ConnectionString) : base(ConnectionString) { }
}

当UsersContext被实例化并初始化时,我被击中:

System.Data.Entity.ModelConfiguration。用户代码未处理ModelValidationExceptionHResult = -2146233088消息=在模型生成过程中检测到一个或多个验证错误:

IdentityUserLogin:: EntityType 'IdentityUserLogin'没有定义密钥。定义这个EntityType的键。IdentityUserRole:: EntityType 'IdentityUserRole'没有定义键。定义这个EntityType的键。IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins'基于没有定义密钥的'IdentityUserLogin'类型。IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles'基于没有定义键的类型'IdentityUserRole'。…

看起来其他的Identity成员表都更新了,但是我没有碰它们。为什么会发生这种情况,我如何纠正它

尝试IdentityDbContext<ExtendedUser>作为UsersContext的基类,因为它在你提到的帖子中。没有它,您就没有任何一行代码来告诉哪个属性是键。如果你不想要IdentityDbContext你应该在方法void OnModelCreating(DbModelBuilder modelBuilder)放属性映射,像:

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       base.OnModelCreating(modelBuilder);
       modelBuilder.Entity<ExtendedUser>().HasKey(t => t.Id);
           ...
   }

相关内容

  • 没有找到相关文章

最新更新