13

我正在尝试将配置文件/会员信息添加到我的 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());           
    }
}
4

3 回答 3

22

打电话base.OnModelCreating(modelBuilder)并没有解决我的问题。

Microsoft.AspNet.Identity.EntityFramework 的行为在 VS2013-Preview、VS2013-RC 和 VS2013-RTM 中似乎有所不同。我正在使用 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 });
    }

(请参阅使用 Fluent API 配置/映射属性和类型

我猜 AspNet.Identity.EntityFramework 的工作正在进行中,这将得到修复(?)

于 2013-10-24T09:43:03.143 回答
19

添加配置后调用base.OnModelCreating(modelBuilder)

于 2013-10-20T06:58:49.463 回答
0

围绕方法执行以下步骤OnModelCreating并在每个步骤之后进行测试以了解是否生效:

  1. 确保你有一个Context来防止他们的规则冲突。
  2. 在提到的方法内部调用base.OnModelCreating(modelBuilder);(首先)
  3. 在方法中添加以下加预览步骤:


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 });
于 2015-03-23T20:03:33.740 回答