2016-04-28 6 views
2

Ich möchte EF code first approach verwenden. Ich habe die Datenbank hinzugefügt und ich generiere die Tabellen. Dann habe ich diese KlasseTabelle nicht zugeordnet mit EF-Code ersten Ansatz

public class Invitation 
    { 


     [Key] 
     public int Id { get; set; } 

     [DefaultValue(false)] 
     public bool State { get; set; } 

     public string Mail { get; set; } 

     public string Tel { get; set; } 

     public string Name { get; set; } 

     public string Qr_code { get; set; } 

    } 

ich diesen Befehl ausführen, dann:

Add-Migrationen zweite

Update-Datenbank

die Up und Down Methoden der zweiten Klasse Migration ist leer !! und keine Tabelle wird zur Datenbank hinzugefügt.

Der Kontext

public class ApplicationContext: IdentityDbContext<ApplicationUser> 
    { 
     public ApplicationContext() 
      :base("DefaultConnection") 
     { 
      Database.SetInitializer<ApplicationContext>(new CreateDatabaseIfNotExists<ApplicationContext>()); 
     } 

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

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

Also muss ich

  1. wissen, was ist der Grund für dieses Problem?
  2. Wie kann ich es beheben?
+3

Ich sehe keine 'DbSet' Werte ... hast du irgendeinen Code vergessen? –

+1

Yepp, der 'DbSet ' Wert fehlt. Das ist der Grund dafür, dass _Up() _ und _Down() _ leer sind. – schlonzo

+0

@MarkC. Ja ich vergesse, es in den Kontext hinzuzufügen, posten Sie Ihre Kommentare als eine Antwort –

Antwort

2

Sieht aus wie Sie Entity Framework über die neue Tabelle sagen vergessen, die Sie hinzugefügt werden sollen (DbSet<Invitation>)

Sobald Sie diese Erweiterung, Entity Framework sollte die Tabelle hinzufügen (n) in der Migration Skript hinzugefügt werden sollen , beziehungsweise.

In der Summierung, müssen Sie diese Zeile hinzufügen:

public DbSet<Invitation> Invitations { get; set; } 

und/oder

public IDbSet<Invitation> Invitations { get; set; } 

und eine weitere Migration Script auszuführen.

1

Ich denke, Sie müssen eine erste Migration erstellen. Wenn dies Ihre erste Migration (beachten Sie, dass dies Ihre bestehende Migrationsgeschichte wird klar, nur so verwenden, wenn Sie zufrieden sind Ihre bestehende Migrationsgeschichte zu verwerfen)

  1. Löschen Sie Ihren Migrations-Ordner in der Lösung
  2. Remove Ihre Änderungen (entfernen Sie den Verweis auf die neue Tabelle von Ihrem DbContext). Beachten Sie, dass -IgnoreChanges diesen Schritt überflüssig machen kann, aber ich kann nicht mit Sicherheit sagen.
  3. Entfernen Sie die MigrationHistory Tabelle aus der Datenbank (es höchstwahrscheinlich nicht existieren, aber Sie können vor und löschen Sie es gehen, wenn es)

Jetzt Migrationen ermöglichen (in Paket-Manager-Konsole)

Enable-Migrations 

Erstellen Sie dann Ihre anfängliche Migration.Dies wird eine Migration für Ihre vorhandenen Schema mit leeren Methoden

Add-Migration Initial –IgnoreChanges 
Update-Database 

Dann aktualisieren Sie Ihre DbContext mit Ihrem neuen Tabellenverweis erstellen und alle anderen Änderungen, die Sie brauchen, machen und tun

Add-Migration MyChanges 
Update-Database 

, dass die Änderungen gelten sollten zur Datenbank. Einige more info over at MSDN, wenn Sie es brauchen.

+0

In der Frage des OPs sagten sie: 'Ich habe die Datenbank hinzugefügt und ich generiere die Tabellen'. Angenommen, das war bereits –

+0

Ich denke nicht die erste Datenbank Die Erstellung erstellt tatsächlich eine Migration. Ich habe Probleme mit der ersten Migration erfahren, die nicht richtig aufgenommen wurde (mit ähnlichen Symptomen von leeren Methoden), die behoben wurden, indem eine anfängliche Migration wie angegeben erzeugt wurde. Allerdings scheint das Problem das fehlende 'DbSet' zu sein, wie Sie in diesem Fall gesagt haben. Ich plante, meine Antwort wegen leichter Zweideutigkeit hier zu lassen, aber ich kann es löschen, es macht das Problem unklar? – Tone

+0

Wirklich? Gab es Ausnahmen oder irgendetwas? Ich denke nicht, dass du es löschen solltest! Es ist sehr gut möglich, dass andere Leute auch in dieses Szenario geraten (glaube einfach nicht, dass das für diese Frage der Fall war). –

2

Versuchen Hinzufügen die folgenden in Ihrer Klasse Application

public DbSet<Invitation> Invitations { get; set; } 

Dann läuft;

Enable-Migration 
Add-Migration note_of_changes 
Update-Database 
+1

Oder anstelle von "Änderungen" könnten Sie eine sinnvollere Notiz hinzufügen "AddDbSet" = P –

+1

Ja, ich werde es deutlicher machen, dass es sich um eine Notiz handelt! Haha – bolt19

Verwandte Themen