我正在尝试将配置文件/成员资格信息添加到我的MVC5应用程序中并添加配置映射。
我收到以下错误消息:
my.Models.IdentityUserLogin :: EntityType'IdentityUserLogin'没有 键定义。定义此EntityType的密钥。
my.Models.IdentityUserRole :: EntityType'IdentityUserRole'没有密钥 定义。定义此EntityType的密钥。
IdentityUserLogins:EntityType:EntitySet'IdentityUserLogins'是 基于没有定义键的类型'IdentityUserLogin'。
IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基于 在类型'IdentityUserRole'上没有定义键。
public class ApplicationUser : IdentityUser
{
public string City { get; set; }
public string Discriminator { get; set; }
public string Address { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ApplicationUserConfiguration());
}
}
答案 0 :(得分:22)
致电base.OnModelCreating(modelBuilder)
并没有为我解决问题。
在VS2013-Preview,VS2013-RC和VS2013-RTM中,Microsoft.AspNet.Identity.EntityFramework的行为似乎有所不同。我正在使用RTM版本。
从IdentityUser继承后,我必须重新创建模型中的所有其他主键才能使其工作:
public class ApplicationUser : IdentityUser
{
public string DisplayName { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DefaultConnection") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
(见Configuring/Mapping Properties and Types with the Fluent API)
我想在AspNet.Identity.EntityFramework上工作正在进行中,这将被修复(?)
答案 1 :(得分:18)
添加配置后调用base.OnModelCreating(modelBuilder)
。
答案 2 :(得分:0)
围绕OnModelCreating
方法执行以下步骤,并在每个方法之后进行测试以了解是否生效:
Context
以防止他们的规则冲突。base.OnModelCreating(modelBuilder);
方法(首先)
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });