Hinzufügen der neuen Tabelle zu einer bestehenden Datenbank mit dem Code-First-Ansatz in EF 6 und MVC 5

Ich weiß, das sollte einfach sein, aber ich war nicht in der Lage zu finden die richtige Anleitung oder eine Erklärung auf der web zu diesem Thema. Es gibt eine Menge von videos und posts über das hinzufügen von neuen Spalte zu einer vorhandenen Tabelle, unter Verwendung von code first-Ansatz, aber ich kann nicht finden, eine Schritt-für-Schritt Erklärung, wie man hinzufügen, ganz neue Tabelle in die bestehende Datenbank.
Das ist seltsam, ich war mir ziemlich sicher, dass ich finden viele Beispiele. Vielleicht meinen such-Kriterien schlecht ist. Also, wenn jemand irgendeinen guten link oder video, bitte teilen.

Was ich versuche zu tun ist, um die Tabelle hinzufügen Beitrag in vorhandenen Standard-Datenbank, erstellt von MVC 5 Projekt.
Ich habe Modell der ersten Klasse, heißt es Post und es hat eine einfache definition:

public class Post
    {
        [Key]
        public int PostId { get; set; }
        public string PostText { get; set; }
        public byte[] ImagePost { get; set; }
        public byte[] FilePost { get; set; }
        public string TextPost { get; set; }
        public string UserId { get; set; }
    } 

Dann habe ich erste Zweifel. Ich weiß, ich sollte zu schaffen DbContext, aber wenn ich treffen wollen Sie eine vorhandene Datenbank, sollte ich die vorhandenen DbContext, bereits erstellt, die standardmäßig in Web.config-Datei wie folgt:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-StudentBookApp-20150114035149.mdf;Initial Catalog=aspnet-StudentBookApp-20150114035149;Integrated Security=True"
      providerName="System.Data.SqlClient" />

Oder ich sollte alle neue DbContext erstellt für die Post-Klasse?

Jedenfalls habe ich es probiert, aber kein Erfolg. Als ich das neue Kontext-ich war dabei folgende PMC:

Enable-Migrations
Add-Migration "PostMigration"
Update-Database

In der Regel, oder geht alles gut, aber ich bekomme keine neue Tabelle in der Datenbank, oder ich bekomme eine Fehlermeldung: AspNetUsers bereits vorhanden ist, und AspNetUsers ist eine der automatisch erstellten Tabellen, die ich geändert habe, durch das hinzufügen neuer Spalten zu.

Update: Mein Rahmen ist jetzt in getrennte Klasse mit dem Namen PostContext und es sieht wie folgt aus:

public class PostContext : DbContext
{
    public PostContext() : base("name=PostContext")
    {
    }

    public DbSet<Post> Posts { get; set; }
}

Zweiten Versuch:

Seit meinem ersten Ansatz nicht, gab kein Ergebnis. Ich habe versucht zu tun, was beschrieben wird, in diesem link. Hinzufügen Zuordnung zu meinem Projekt:

Habe ich crated neue Klasse PostConfiguration für Zuordnung:

public class PostConfiguration : EntityTypeConfiguration<Post>
    {
        public PostConfiguration() : base()
        {
            HasKey(p => p.PostId);
            ToTable("Post");

            HasOptional(p => p.PostText);
            ToTable("Post");

            HasOptional(p => p.ImagePost);
            ToTable("Post");

            HasOptional(p => p.TextPost);
            ToTable("Post");

            HasOptional(p => p.FilePost);
            ToTable("Post");

            HasRequired(p => p.UserId);
            ToTable("Post");
        }
    }

In der Klasse Post habe ich Hinzugefügt, Kontext-Klasse zu PostContext mit modelBuilder Variablen, wie Sie schon vorgeschlagen, in aufgeführten link oben:

 public class PostContext : DbContext
    {
        static PostContext()
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PostContext>());
        }

        public DbSet<Post> Posts { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Properties()
                        .Where(p => p.Name == "Key")
                        .Configure(p => p.IsKey());

            modelBuilder.Configurations.Add(new PostConfiguration());
        }

   }

Ich habe alle PMC-Befehle wieder, und immer noch kein Erfolg, Tabelle Post fehlt die default-Datenbank.

  • Haben Sie Ihre Klasse zu Ihrem Kontext? Können wir Ihre Kontext-Datei?
  • Sicher, ich habe gerade meinen Beitrag aktualisiert und Hinzugefügt PostContext class code 🙂
  • Das ist SQL-Server, richtig? (Ich Frage deshalb, weil Migrationen funktionieren nicht mit der ADO.NET provider für SQLite).
  • Ja, es ist. Ich meine, es ist eine lokale Datenbank, da ich aber weiß, VS 2013 verwendet den SQL-Server als Standard. 🙂 Und Migrationen hat funktioniert, wenn ich das hinzufügen neue Spalten zu Tabelle AspNetUsers, so dass Sie unterstützt werden von dieser Datenbank sicher... ich bin fehlen einige Schritt, und nicht eine Idee was es sein kann...:(
  • Benennen Sie Ihre DefaultConnection als PostContext
  • Immer noch nichts... ich habe getan, die laufen alle Migrations-Befehle in PMC und alle es getan hat, ist geändert, der name der lokalen Datenbank von DefaultConnection zu PostContext... P. S. In generierten migratgion.cs-Datei für die Up () - Methode bekomme ich leere Körper, und ich denke, dass dies ist, wo die CreateTable-Befehle werden automatisch generiert... ich denke Also, dass migration nicht erkannt wird, dass es irgendwelche änderungen an Modell...
  • Sie haben nur eine Verbindung und Zusammenhang, Recht?
  • ja nur, dass man das verwenden, um einen Namen hat DefaultConnection und jetzt ist PostContext...
  • Sie sagten, Sie haben bestehende Tabellen, aber ich sehe nur Posts in Ihrem Kontext
  • ja Tabelle ist die bestehende und auto-erstellt im Projekt...sollte ich finden automatisch generierten Kontext, und fügen PostContext es?

InformationsquelleAutor nemo_87 | 2015-01-15
Schreibe einen Kommentar