web-dev-qa-db-de.com

EF 5 Enable-Migrations: In der Assembly wurde kein Kontexttyp gefunden

Ich habe 4 Projekte: 

Toombu.Entities : all models are there
Toombu.DataAccess: Mapping, Repository and ToombuContext
Toombu.Logique : Logic of my application
Toombu.Web : MVC 4 application. With all others DLL.

Ich habe versucht, die Migration in Toombu.Web zu aktivieren, aber ich hatte diesen Fehler:

No context type was found in the Assembly

Wie kann ich die Migration aktivieren?

45
NOr

verwenden Sie die Option -ProjectName in der Package Manager Console:

Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
84
hVostt

Ich bin überrascht, dass niemand die naheliegende Antwort auf diese Frage erwähnt hat: Entity Framework erfordert einen Kontext, bevor Enable-Migrationen funktionieren. Die vom OP gepostete Fehlermeldung weist darauf hin, dass kein Kontext gefunden wurde. Sicher, es könnte daran liegen, dass die Paket-Manager-Konsole den Kontext nicht "sieht". In diesem Fall ist die akzeptierte Antwort eine mögliche Lösung (eine andere Lösung ist eine, die ich unten empfehle). Im aktuellen Projekt (Assembly) muss jedoch ein Kontext vorhanden sein, bevor andere Lösungen funktionieren.

Was bedeutet es, einen Kontext zu haben? Dies bedeutet, dass in Ihrem Projekt eine Klasse vorhanden sein muss, die von DbContext (in System.Data.Entity) erbt. Hier ist ein Beispiel:

public class MyDbContext : DbContext
{
    public MyDbContext()
    {
    }
}

Seien Sie sicher, dass Sie verwenden

using System.Data.Entity;

bevor der obige Code Zugriff auf die DbContext-Klasse hat und Sie NuGet verwendet haben, um Entity Framework 4.1 oder höher für das aktuelle Projekt abzurufen. 

Wenn Sie die ganze Zeit über einen Kontext hatten, die Paket-Manager-Konsole es jedoch nicht "sieht": In Visual Studio 2013 müssen Sie nicht die Option -ProjectName verwenden. Wechseln Sie stattdessen zur Package Manager Console (sie ist in der Liste Ansicht | Andere Windows verfügbar), und sehen Sie sich die beiden Dropdown-Listen an, die oben im andockbaren Fenster der Package Manager Console angezeigt werden. Das erste Dropdown ist für Paketquelle; Die zweite ist für Default Project. Wenn Sie das Standardprojekt ausklappen und ein Projekt in Ihrer Lösung auswählen, werden alle Befehle, die Sie in der Package Manager-Konsole ausgeben, für das ausgewählte Projekt ausgeführt. 

117
Jazimov

Ändern Sie das Standardprojekt und wählen Sie das Startprojekt aus der Dropdown-Liste aus:  enter image description here

34
Sadjad Khazaie

Wenn noch jemand mit diesem Problem konfrontiert ist. Ich habe es mit dem folgenden Befehl gelöst:

Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>

Vergessen Sie nicht, den vollständigen Pfad zu Ihrem Kontextnamen zu verwenden.

7
Abhinandan

Sie haben dbcontext in Toombu.DataAccess. Sie sollten also Migrationen in Toombu.DataAccess aktivieren.

5

Ich musste eine Kombination aus zwei der obigen Kommentare machen.

Sowohl das Festlegen des Standardprojekts in der Package Manager Console als auch die abhinandanischen Kommentare zum Hinzufügen der Variablen -ContextTypeName zu meinem vollständigen Befehl. Also mein Befehl war wie folgt ..

Enable-Migrations -StartUpProjectName RapidDeploy -ContextTypeName RapidDeploy.Models.BloggingContext -Verbose

Meine Einstellungen::

  • Projektname - RapidDeploy
  • BloggingContext (Klasse mit DbContext, Datei befindet sich im Ordner Models des Hauptprojekts)
2
ekgcorp

Ich habe ein Class im Models-Verzeichnis namens myData mit folgendem Code erstellt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace Vidly.Models
{
    public class MyDbContext : DbContext
    {
        public MyDbContext()
        {
        }
    }
}

App neu erstellt mit: Control-Shift-B

dann lief folgendes in der nuGet Konsole:

Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.MyDbContext -Verbose

die Konsole gab zurück:

Verwenden des Startprojekts 'Vidly'. Verwenden des NuGet-Projekts 'Vidly'. Überprüfen, ob der Kontext auf eine vorhandene Datenbank zielt ... Code First Migrations für Projekt Vidly aktiviert. Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.myData -Verbose

nd FrameWork hat ein Migrationsverzeichnis erstellt und dort eine Configuration.cs-Vorlage mit folgendem Code geschrieben:

namespace Vidly.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<Vidly.Models.MyDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(Vidly.Models.MyDbContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data.
        }
    }
}
1
Paul

Führen Sie die folgenden Schritte aus, um das Problem zu beheben

Install-Package EntityFramework-IncludePrerelease

oder Installieren Sie das Entity Framework vom Nuget Package Manager

Starten Sie Visual Studio neu

Danach wurde "In Assembly wurde kein Kontexttyp gefunden" angezeigt.

Um es zu lösen - Dies bedeutet "Kein Kontext", dass Sie eine Klasse im "Modell" -Ordner in Ihrer App mit dem Suffix "DbContext ..." wie diesem "AppDbContext" erstellen müssen. Dort müssen Sie eine Bibliothek einbinden, die System.Data.Entity verwendet.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;


namespace Oceans.Models
{
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {
        }
    }
}

Führen Sie anschließend den folgenden Befehl in Package Manager aus:

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>

Mein Projektname lautet - MyFirstApp und AppDbContext befinden sich im Modellordner, sodass der Pfad dem entspricht

Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext
1

Mein Problem war link ----> problem1

Ich habe dieses Problem mit einer einfachen Befehlszeile gelöst

Install-Package EntityFramework-IncludePrerelease

Danach musste ich mich einem weiteren Problem stellen, etwa:

"In Assembly wurde kein Kontexttyp gefunden"

Ich löse das ganz einfach. Dieses "Kein Kontext" bedeutet, dass Sie eine Klasse im Ordner "Model" in Ihrer App mit einem Suffix wie DbContext ... wie diesem MyDbContext ..__ erstellen müssen. Dort müssen Sie einige Bibliothek mit System.Data.Entity einfügen. 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;


namespace Oceans.Models
{
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {
        }
    }
}

Danach brauchte ich nur diese Befehlszeile: 

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>

Ändern Sie das Standardprojekt in Datenzugriff

Ändern Sie das Standardprojekt-Dropdown-Menü in der Paket-Manager-Konsole in Datenzugriff und geben Sie Migrationen an ...

Das ist alles Erfolg

1
ohmprakashinfo

Vielen Dank für die Vorschläge, ich habe das Problem gelöst, indem ich alle Lösungen hier kombiniert habe. Zuerst habe ich das DbContext-Modell erstellt:

 public class MyDbContext: DbContext
    {
        public MyDbContext()
        {
        }
    }

Nach dem Erstellen der dbcontext-Klasse habe ich den Befehl enable-migration mit dem Projektnamen ausgeführt: enable-migrations -ProjectName YourProjectName

1
befree2j

In mosh Tutorial wurde ein einzelnes Benutzerkonto ausgewählt, das einen Datenbankkontext in der Vorlage erstellt hat. Stellen Sie außerdem sicher, dass EntityFramework im Nuget-Paketmanager installiert ist. enter image description here

0
Bukunmi

Ich habe das gleiche Problem bekommen. Ich habe sogar versucht, obige Migrationen ausgeführt werden, obwohl ich dies bereits getan habe. Aber es gibt immer wieder den gleichen Fehler. Dann musste ich den Schalter force verwenden, um dieses Problem zu überwinden. Ich bin mir sicher, dass dies im Fall einer anderen Person helfen wird, und dass dies eine mögliche Lösung darstellt. 

Nachdem Sie die Migration mit Gewalt aktiviert haben, sollten Sie Ihre Datenbank aktualisieren (Stellen Sie sicher, dass das Standardprojekt richtig eingestellt ist). Andernfalls erhalten Sie ein anderes Problem, z. B. wenn explizite Migrationen anstehen.

Führen Sie dann einfach Ihre Add-Migrationen oder andere Befehle aus, es sollte funktionieren.

Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force
0
user1570636

Stellen Sie sicher, dass Sie dieselbe Version von Entity Framework für alle Projekte verwenden, die NuGet Package Manager verwenden.

Kürzlich durchgeführte Windows-Updates haben möglicherweise eine neuere Version von Entity Framework in Ihrem aktiven Projekt installiert.

Hintergrund: Um den 16. März 2016 herum bekam ich diesen Fehler, als ich versuchte, Migrationen zu einem Projekt hinzuzufügen, für das ich bereits Migrationen aktiviert hatte und Migrationen erfolgreich durchgeführt hatte.

Ich habe bemerkt, dass um den 10. März herum eine neue stabile Version von Entity Framework 6 veröffentlicht wurde. 

Wenn ich den Parameter -ContextTypeName im Befehl enable-migrations angegeben habe, wurde ein Fehler angezeigt, der darauf hinweist, dass die Migrationen bereits aktiviert waren.

Auflösung:

1) Extras -> Nuget Package Manager -> Nuget-Pakete für Lösung verwalten

2) (Nicht sicher, ob dieser Schritt erforderlich ist, aber ..) Ich habe meine Version des Nuget Package Manager auf die neueste Version aktualisiert. Nach der Aktualisierung meiner Version von Nuget Package Manager musste ich Visual Studio zweimal neu starten, bevor die NuGet-Befehlszeile ordnungsgemäß funktioniert.

3) Extras -> Nuget-Paket-Manager -> Nuget-Pakete für Lösung verwalten -> Installierte Pakete suchen -> Entity Framework eingeben

ein. Dort werden möglicherweise mehrere Versionen von Entity Framework angezeigt.

b. Klicken Sie in jeder Version von Entity Framework auf Verwalten, und stellen Sie sicher, dass Ihre Projekte die SAME-Version von Entity Framework verwenden. 

  • Deaktivieren Sie die Version von Entity Framework, die Sie nicht verwenden, und stellen Sie für die Version von Entity Framework, die Sie verwenden, sicher, dass sie für alle Ihre Projekte aktiviert ist, die sie benötigen.

Wie bereits in Schritt 2 erwähnt, musste ich Visual Studio zweimal neu starten, damit die NuGet Package Manager Console ordnungsgemäß funktioniert, nachdem ich meine Version des NuGet Package Manager aktualisiert habe. Beim ersten Start der Konsole ist ein Fehler aufgetreten. Die Ausnahme, die createinstancefrom mit 8 Argumenten aufruft, konnte Datei oder Assembly EntityFramework nicht laden, wenn der Befehl enable-migrations zum zweiten Mal ausgeführt wurde.

Der Neustart von Visual Studio schien diese Probleme jedoch zu lösen. 

0
WWC

Dieser Fehler wird abgerufen, weil der Compiler in Ihrer Anwendung nicht die Klasse "Context" erhält. Sie können es also manuell über Add -> Class hinzufügen und mit 'DbContext' Class .__ erben. Beispiel:

public class MyDbContext : DbContext
    {
        public DbSet<Customer> Customer { get; set; }
        public MyDbContext()
        {
        }
    }
0
Rohit Ghatage

So aktualisieren Sie Tabelle und Spalte in mvc mithilfe des ersten Ansatzes der Entität framework code

1: Werkzeug> Paket-Manager-Konsole

2: Wählen Sie das aktuelle Projekt aus, in dem die Kontextklasse vorhanden ist

3: Aktivieren Sie die Migration mit folgendem Befehl PM > enable-migrations 

4: Fügen Sie den Namen des Migrationsordners mit dem folgenden Befehl hinzu PM > add-migration MyMigrationName

4: Jetzt die Datenbank nach dem Befehl aktualisieren PM > update-database

0