2016-05-27 4 views
0

In meiner ASP.NET MVC-App versuche ich eine 1: n-Beziehung aus der AspNetUsers Tabelle zu meiner Recipes Tabelle hinzuzufügen.Entity Framework - keine Beziehung von AspNetUsers zu benutzerdefinierten Tabelle hinzufügen

Nach dem Ausführen einer Migration gibt es eine Beziehung Recipes-AspNetUsers aber es ist nicht eine aus AspNetUsers zu Recipes

Dies ist, wie ich das Modell bin definieren:

public class ApplicationUser : IdentityUser 
{ 
    public List<Recipe> Recipes { get; set; } 

    <omitted for brevity> 
} 



public class Recipe 
{ 
    <other properties omitted> 

    public virtual ApplicationUser User { get; set; } 
    public string UserId { get; set; } 
} 


public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public DbSet<Recipe> Recipes { get; set; } 

    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
     Database.SetInitializer<ApplicationDbContext>(null); 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

Ich habe:

  • überprüft die Rezepte Tabelle in SQL Management Studio vorhanden ist (es tut)
  • versucht, ähnliche Probleme Googeln (Ich bin pably die falschen Such tun)
  • laufen Update-Database in der Konsole
+1

Was meinst du mit "es gibt keinen von' User' zu 'Rezept'"? Was ist die Voraussetzung? – Ghukas

+0

@Ghukas Ich möchte eine Eins-zu-viele-Beziehung von der 'AspNetUsers'-Tabelle zur' Recipes'-Tabelle ... – NRKirby

+1

Wenn Sie Code-First verwenden, sollte Ihnen der Migrationscode in der 'public override void Up()' -Funktion angezeigt werden . Können Sie bitte überprüfen, dass es den Code für die gewünschten Tabellen enthält und Informationen über PK/FK enthält? – Ghukas

Antwort

2

@NRKirby, ich habe genau den gleichen Code verwendet, um Sie oben geschrieben haben, und hier ist, wie es in der Datenbank aussieht:

enter image description here

I Id Eigenschaft im Recipe Modell hinzugefügt haben. Ich weiß nicht, ob Sie es in den weggelassenen Eigenschaften haben. Der Code von der Migration ist wie folgt:

public partial class InitalCreate : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(
      "dbo.Recipes", 
      c => new 
       { 
        Id = c.Int(nullable: false, identity: true), 
        UserId = c.String(maxLength: 128), 
       }) 
      .PrimaryKey(t => t.Id) 
      .ForeignKey("dbo.AspNetUsers", t => t.UserId) 
      .Index(t => t.UserId); 

     CreateTable(
      "dbo.AspNetUsers", 
      c => new 
       { 
        Id = c.String(nullable: false, maxLength: 128), 
        Email = c.String(maxLength: 256), 
        EmailConfirmed = c.Boolean(nullable: false), 
        PasswordHash = c.String(), 
        SecurityStamp = c.String(), 
        PhoneNumber = c.String(), 
        PhoneNumberConfirmed = c.Boolean(nullable: false), 
        TwoFactorEnabled = c.Boolean(nullable: false), 
        LockoutEndDateUtc = c.DateTime(), 
        LockoutEnabled = c.Boolean(nullable: false), 
        AccessFailedCount = c.Int(nullable: false), 
        UserName = c.String(nullable: false, maxLength: 256), 
       }) 
      .PrimaryKey(t => t.Id) 
      .Index(t => t.UserName, unique: true, name: "UserNameIndex"); 

     // Some other table definitions... 
    } 

    public override void Down() 
    { 
     // ... 
     DropForeignKey("dbo.Recipes", "UserId", "dbo.AspNetUsers");    
     // ... 
     DropIndex("dbo.AspNetUsers", "UserNameIndex"); 
     DropIndex("dbo.Recipes", new[] { "UserId" }); 

     // ... 
     DropTable("dbo.AspNetUsers"); 
     DropTable("dbo.Recipes"); 
    } 
} 

Wenn das Ergebnis in der DB ist es, was Sie wollen, ich nehme an, Sie mindestens einen der Befehle falsch läuft.

  • Aktivieren von Migrationen: Aktiviert Code First-Migrationen in einem Projekt.
  • Add-Migration: Erstellt ein Migrationsskript für ein ausstehendes Modell
    Änderungen.
  • Update-Datenbank: Wendet alle ausstehenden Migrationen auf die Datenbank
    an.
+0

Vielen Dank für eine solche detaillierte Antwort. Können Sie mir sagen, wo im Migrationscode die Beziehung von AspNetUsers zu Recipes beschrieben wird? – NRKirby

+1

Es befindet sich in der '.ForeignKey (" dbo.AspNetUsers ", t => t.UserId) Zeile. – Ghukas

1

Alle Einheiten, die Sie wollen ein Teil desselben Modells sein.

Suchen Sie Ihre Kontextklasse und fügen Sie ein EntitySet für Ihren neuen Typ hinzu.

+0

Danke für Ihre Antwort - Ich habe bereits getan, was Sie vorschlagen? – NRKirby

+1

Haben Sie in Ihrem Rezeptmodell eine Eigenschaft vom Typ ApplicationUser?Möglicherweise muss dies erst erkannt werden, bevor die Beziehung erstellt wird. Wenn es in Ihrer Rezepttabelle keine ID erstellt hat, die auf den Benutzer verweist, ist das nicht richtig. –

+0

Hallo, Ich habe meinen ursprünglichen Beitrag aktualisiert – NRKirby

Verwandte Themen