web-dev-qa-db-de.com

Benutzer in Entitätstyp MVC5 EF6

Ich habe in MVC5 eine Klasse erstellt, in der ich einen primären Eigentümer des Inhalts und dann einige Editoren für den Inhalt haben möchte:

public class Content
{
    public int ID { get; set; }
    public IdentityUser Owner { get; set; }
    public ICollection<IdentityUser> Editors { get; set; }
    public string Title{ get; set; }
    public string Body { get; set; }
}

Im Datenbankkontext habe ich den folgenden Code:

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

    modelBuilder.Entity<Content>()
        .HasOptional(c => c.Editors)
        .WithRequired()
        .WillCascadeOnDelete();

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete();
}

Ich würde erwarten, dass Microsoft das IdentityUser -Objekt so implementiert hat, dass es in anderen Entitätstypen verwendet werden kann. Daher mache ich wahrscheinlich etwas falsch, wenn ich versuche, einen Controller für die Content-Entität zu erstellen Typ bekomme ich folgenden Fehler:

EntityType 'IdentityUserLogin' has no key defined
EntityType 'IdentityUserRole' has no key defined
EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no key defined
EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no key defined

Ich habe auch versucht, den folgenden Code zum ApplicationDbContext hinzuzufügen, wie in dieser Frage beschrieben Map-Tabellen mit fluent api in asp.net MVC5 EF6? :

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 });
}

Ich muss etwas falsch machen. Bitte sagen Sie mir, wie ich mit Benutzern in meinem Content EntityType umgehen kann.

49
Gunnar

Die folgende Methode OnModelCreating erstellt einen Arbeitskontext. Ich bin mir nicht sicher, ob es die gewünschte Zuordnung ist.

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

    modelBuilder.Entity<Content>()
        .HasMany(c => c.Editors)
        .WithOptional()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete(false);

    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 });
}
61
Olav Nybø

Ich hatte das gleiche Problem und stellte fest, dass ich nicht angerufen hatte

 base.OnModelCreating(modelBuilder);

in meinem DbModel

104
Aaron