web-dev-qa-db-fra.com

IdentityUserLogin <string> 'nécessite l’erreur de définition d’une clé primaire lors de l’ajout de la migration

J'utilise 2 Dbcontexts différents. Je veux utiliser 2 utilisateurs de bases de données différents et mycontext. En même temps, je reçois une erreur. Le type d'entité 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin' nécessite la définition d'une clé primaire. Je pense qu'il y a quelque chose qui ne va pas avec IdentityUser, s'il vous plaît, suggérez-moi où puis-je changer mon code afin que je puisse ajouter une migration.

Ma classe 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; }
}

et classe AppUser:

public class AppUser : IdentityUser
{
  //some other propeties
}

lorsque j'essaie d'ajouter une migration, l'erreur suivante se produit.

The entity type 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>' requires a primary key to be defined.

donnez-moi la solution pour résoudre le problème ..

49
Ramesh Kumar

Pour réduire le lien à un mot, essayez ceci:

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

    ...

Voir lien ci-dessus pour plus d'informations.

135
Greg Gum

Ce problème commencera dès que vous aurez écrit les lignes suivantes dans DBContext sans ajouter 'base.OnModelCreating(modelBuilder);'

protected override void OnModelCreating(ModelBuilder modelBuilder)
{

}

Deux solutions:

1) Ne remplacez pas OnModelCreating dans DbContext Until it becomes necessary

2) Ignorer mais appeler base.OnModelCreating(modelBuilder)

20
immirza

Le problème est que AppUser est hérité d'IdentityUser et que leurs clés primaires ne sont pas mappées dans la méthode OnModelCreating de dbcontext.

Il existe déjà un poste disponible avec résolution. Visitez le lien ci-dessous

EntityType 'IdentityUserLogin' n'a pas de clé définie. Définissez la clé pour ce EntityType

J'espère que cela t'aides.

6
RajN