IdentityUserLogin <string>'在添加迁移时需要定义主键错误

Ram*_*mar 58 entity-framework

我正在使用2种不同的Dbcontexts.我想使用2个不同的数据库用户和mycontext.虽然这样做我收到错误实体类型'Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin'需要定义主键.我认为IdentityUser有问题请建议我在哪里可以更改我的代码,以便我可以添加迁移.

我的Dbcontext类:

 class MyContext : DbContext
{
    public DbSet<Post> Posts { get; set; }
    public DbSet<Tag> Tags { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<PostTag>()
            .HasKey(t => new { t.PostId, t.TagId });

        modelBuilder.Entity<PostTag>()
            .HasOne(pt => pt.Post)
            .WithMany(p => p.PostTags)
            .HasForeignKey(pt => pt.PostId);

        modelBuilder.Entity<PostTag>()
            .HasOne(pt => pt.Tag)
            .WithMany(t => t.PostTags)
            .HasForeignKey(pt => pt.TagId);
    }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public AppUser User {get; set;}
    public string Content { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class Tag
{
    public string TagId { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class PostTag
{
    public int PostId { get; set; }
    public Post Post { get; set; }

    public string TagId { get; set; }
    public Tag Tag { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和AppUser类:

public class AppUser : IdentityUser
{
  //some other propeties
}
Run Code Online (Sandbox Code Playgroud)

当我尝试添加迁移时,会发生以下错误.

The entity type 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>' requires a primary key to be defined.
Run Code Online (Sandbox Code Playgroud)

给我解决问题的方法..

Gre*_*Gum 160

要简化链接,请尝试以下方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

    ...
Run Code Online (Sandbox Code Playgroud)

请参阅上面的链接了解更多

  • Core 3.0 扩展 ASPNetUsers 但使用单个数据库时遇到此问题。将这一行添加到 ApplicationDBContext.OnModelCreating 中,它很有魅力。 (4认同)

imm*_*rza 24

只要在DBContext中编写以下行而不添加,就会开始出现此问题 'base.OnModelCreating(modelBuilder);'

protected override void OnModelCreating(ModelBuilder modelBuilder)
{

}
Run Code Online (Sandbox Code Playgroud)

两种解决方案

1)不要OnModelCreating在DbContext中覆盖Until it becomes necessary

2)覆盖但呼叫 base.OnModelCreating(modelBuilder)


Raj*_*ajN 6

问题是AppUser继承自IdentityUser,它们的主键未映射到dbcontext的OnModelCreating方法中.

已经有一个解决方案的帖子.请访问以下链接

EntityType'IdentityUserLogin'没有定义键.定义此EntityType的键

希望这可以帮助.


归档时间:

查看次数:

42441 次

最近记录:

7 年,9 月 前