我在VS 2013中有一个标准的MVC 5项目,并使用内置的身份提供程序。我正在尝试根据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.ModelValidationException 的HResult = -2146233088 消息=在模型生成期间检测到一个或多个验证错误:
IdentityUserLogin :: EntityType'IdentityUserLogin'没有定义键。定义此EntityType的键。 IdentityUserRole :: EntityType'IdentityUserRole'没有定义键。定义此EntityType的键。 IdentityUserLogins:EntityType:EntitySet'IdentityUserLogins'基于没有定义键的类型'IdentityUserLogin'。 IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基于类型'IdentityUserRole',没有定义键。 ....
似乎其他身份成员资格表已更新,但我没有触及其中任何一个。为什么会发生这种情况,我该如何纠正呢。
答案 0 :(得分:1)
尝试IdentityDbContext<ExtendedUser>
作为UsersContext
的基类,因为它在您提到的帖子中。如果没有它,你就没有任何代码可以告诉ef哪个属性是关键。如果你不想要IdentityDbContext,你应该在方法void OnModelCreating(DbModelBuilder modelBuilder)
中放置属性映射,例如:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ExtendedUser>().HasKey(t => t.Id);
...
}