2017-08-08 7 views
0

Ich habe eine existing application, die ich neu schreibe als .NET Core API mit einem ReactJS-Front-End. Ich bin immer noch in der API-Ende, und ich habe ein Problem festgestellt..Net Core API mit EF Core Code First und IdentityUser

CODE

Ich habe eine BbUser.cs Entitätsklasse mit dem folgenden Code:

public class BbUser : IdentityUser 
{ 
    public int Points { get; set; } = 0; 
    public string DisplayUsername { get; set; } 
} 

Und ich auch eine Artist.cs Entitätsklasse haben:

public class Artist 
{ 
    public int Id { get; set; } 
    [Required] 
    [MaxLength(50)] 
    public string FirstName { get; set; } 
    [MaxLength(50)] 
    public string LastName { get; set; } 
    [MaxLength(100)] 
    public string UrlFriendly { get; set; } 
    public string ImageUrl { get; set; } 
    public bool IsVerified { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public DateTime ModifiedOn { get; set; } 
    public ICollection<Lyric> Lyrics { get; set; } = new List<Lyric>(); 
    public string UserId { get; set; } 
    public BbUser User { get; set; } 
} 

Ich brauche eine ein- zu-viele-Beziehung zwischen BbUser und Artist. Ein Benutzer kann viele Künstler und Texte einreichen ... usw. Einfaches Zeug wirklich.

PROBLEM

Die Anwendung baut in Ordnung, aber wenn ich es zu laufen versuchen, durch einen Controller schlägt den Zugriff auf die Datenbank benötigt, erhalte ich folgende Fehlermeldung:

The entity type 'IdentityUserLogin' requires a primary key to be defined.

Ich hatte diese Probleme mit regulärem EF Code First (nicht Core) und the fix for that funktionieren hier nicht.

Antwort

1

Dieses Modell für mich gearbeitet (kompilierte und keine Ausnahmen zur Laufzeit), wenn ich nächsten Code in der DbContext Klasse verwendet:

protected override void OnModelCreating(ModelBuilder builder) 
    { 
     builder.Entity<BbUser>(b => b.ToTable("AspNetUsers")); 
     base.OnModelCreating(builder); 
    } 

Ohne base.OnModelCreating(builder) Aufruf erhalte ich den gleichen Fehler, denn in diesem Fall Zusammenhang isn Das Identitätsschema nicht anwenden.

UPDATE: Alles funktioniert gut für mich, wie Sie aus dem Screenshot unten sehen können: enter image description here

Ich habe noch eine Idee, warum Sie einen solchen Fehler haben kann. Hat Ihr BbContext von DbContext Klasse oder IdentityDbContext<IdentityUser> geerbt? Weil ich den gleichen Fehler hatte, der auf deinem Screenshot war, wenn ich gewöhnliche DbContext Klasse verwendete.

Um die Richtigkeit der Tabellen zu gewährleisten, sollten Sie IdentityDbContext<IdentityUser> verwenden. Unterhalb der gesamte Code für meine Arbeit DbContext Klasse

public class BbContext :IdentityDbContext<IdentityUser> 
    { 
     public BbContext(DbContextOptions options):base(options) 
     { 
      Database.EnsureCreated(); 
     } 

     public DbSet<Artist> Artists { get; set; } 
     public DbSet<Lyric> Lyrics { get; set; } 
     public DbSet<Heart> Hearts { get; set; } 

     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      builder.Entity<BbUser>(b => b.ToTable("AspNetUsers")); 
      builder.Entity<Heart>().HasKey(h => new {h.UserId, h.LyricId}); 
      base.OnModelCreating(builder); 
     } 
    } 
+0

ich voraus ging einfach und [versucht, was Sie vorgeschlagen] (https://www.screencast.com/t/xnwgQlAt4). Leider bekomme ich den gleichen Fehler. – Ciwan

+0

@Ciwan Seltsam, können Sie die LINQ-Abfrage zeigen, die einen solchen Fehler generiert? – user2771704

+0

Ich habe keine LINQ-Abfrage als solche. Ich möchte nur testen, um sicherzustellen, dass mein Db erstellt wird, also habe ich einen [DummyController] (https://gist.github.com/Ciwan1859/e9a2d6ddcee0c2145a2b3e434c4021af) erstellt, der in meinem Kontext über den Konstruktor übergeben wird. Dies sollte den EF Core zwingen, meine Datenbank zu erstellen, und wie Sie sehen, steht dieser Fehler im Weg. – Ciwan

0

Bitte versuchen Sie einen Guid Eigenschaft Id namens erklärt, beide mit dir und auf der IdentityUserLogin Einheit ein.

Eine weitere Option ist eine Eigenschaft zu erklären und schmücken ihn mit [Key] Attribut

+0

hmm Ich dachte, IdentityUser hätte das schon? – Ciwan

+0

ich kreise zurück auf diese auch ... – Leonardo