web-dev-qa-db-fra.com

EF 5 Enable-Migrations: Aucun type de contexte n'a été trouvé dans l'assembly.

J'ai 4 projets: 

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.

J'ai essayé d'activer la migration dans Toombu.Web mais j'avais cette erreur:

No context type was found in the Assembly

Comment puis-je activer la migration?

45
NOr

utilisez l'option -ProjectName dans la console du gestionnaire de packages:

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

Je suis surpris que personne n'ait mentionné la réponse évidente à cette question: Entity Framework nécessite un contexte avant que l'autorisation de migration ne fonctionne. Le message d'erreur affiché par l'OP suggère qu'aucun contexte n'a été trouvé. Bien sûr, cela pourrait être parce que la console du gestionnaire de paquets ne "voit" pas le contexte - auquel cas la réponse acceptée est une solution possible (une autre solution est celle que je suggère, ci-dessous). Mais un projet doit exister dans le projet actuel (Assembly) avant que toute autre solution ne fonctionne.

Qu'est-ce que cela signifie d'avoir un contexte? Cela signifie qu'il doit exister une classe dans votre projet qui hérite de DbContext (dans System.Data.Entity). Voici un exemple:

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

Assurez-vous d'utiliser

using System.Data.Entity;

avant que le code ci-dessus ait accès à la classe DbContext et que vous avez utilisé NuGet pour obtenir Entity Framework 4.1 ou une version ultérieure pour le projet en cours. 

Si vous avez toujours eu un contexte mais que la console Package Manager ne le "voit" pas: dans Visual Studio 2013, vous n'avez pas à utiliser le commutateur -ProjectName. À la place, accédez à la console du gestionnaire de packages (elle est disponible dans la liste Afficher | Autres fenêtres), puis consultez les deux menus déroulants qui apparaissent en haut de la fenêtre dockable de la console de gestionnaire de packages. Le premier menu déroulant concerne Package Source; la seconde concerne le projet par défaut. Si vous déposez le projet par défaut et sélectionnez un projet dans votre solution, les commandes émises dans la console du gestionnaire de packages seront exécutées sur le projet sélectionné. 

117
Jazimov

Modifiez le projet par défaut et choisissez le projet de démarrage dans la liste déroulante:  enter image description here

34
Sadjad Khazaie

Si quelqu'un est toujours confronté à ce problème. Je l'ai résolu en utilisant la commande suivante:

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

N'oubliez pas d'utiliser le chemin d'accès complet à votre nom de contexte.

7
Abhinandan

Votre dbcontext est dans Toombu.DataAccess Vous devez donc activer les migrations dans Toombu.DataAccess.

5

Je devais faire une combinaison de deux des commentaires ci-dessus.

Définition du projet par défaut dans la console du gestionnaire de package et commentaires Abhinandan sur l'ajout de la variable -ContextTypeName à la commande complète Donc, ma commande était comme suit ..

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

Mes paramètres::

  • NomProjet - RapidDeploy
  • BloggingContext (classe contenant DbContext, le fichier se trouve dans le dossier Modèles du projet principal)
2
ekgcorp

J'ai créé une Classe dans le répertoire Models appelée: myData avec le code suivant:

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()
        {
        }
    }
}

reconstruit l'application avec: control-shift-b

a ensuite lancé les opérations suivantes dans la console nuGet:

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

la console a retourné:

Utilisation du projet de démarrage 'Vidly'. Utiliser le projet 'Vidly' de NuGet. Vérification si le contexte cible une base de données existante ... Migration de code d'abord activée pour le projet Vidly. Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.myData -Verbose

Et FrameWork a créé un répertoire Migrations et a écrit un modèle Configuration.cs avec le code suivant:

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

Suivez les étapes ci-dessous pour résoudre le problème

Install-Package EntityFramework-IncludePrerelease

ou installer la structure d'entité à partir du gestionnaire de paquets Nuget

Redémarrer Visual Studio

Après cela, je devenais "Aucun type de contexte n'a été trouvé dans Assembly"

Pour résoudre ce problème - Ce "pas de contexte" signifie que vous devez créer une classe dans le dossier "Modèle" de votre application avec un suffixe tel que DbContext ... comme cette AppDbContext. Vous devez y inclure une bibliothèque utilisant System.Data.Entity;

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()
        {
        }
    }
}

Après cela, exécutez la commande ci-dessous sur le gestionnaire de packages:

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

Le nom de mon projet est - MyFirstApp et AppDbContext se trouvent dans le dossier Model afin que le chemin d'accès ressemble à

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

Mon problème était link ----> problem1

J'ai résolu ce problème avec une simple ligne de commande

Install-Package EntityFramework-IncludePrerelease

Après cela, je devais faire face à un autre problème, quelque chose comme:

"Aucun type de contexte n'a été trouvé dans Assembly"

Je résous cela très facilement. Ce "pas de contexte" qui signifie que vous devez créer une classe dans le dossier "Modèle" de votre application avec un suffixe tel que DbContext ... comme ceci: MyDbContext . Vous devez inclure une bibliothèque using System.Data.Entity; 

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()
        {
        }
    }
}

Après cela, j'ai juste besoin de cette ligne de commande: 

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

Changer le projet par défaut en accès aux données

changer le menu déroulant du projet par défaut dans la console du gestionnaire de paquets en accès aux données et autoriser les migrations ...

C'est tout le succès

1
ohmprakashinfo

Dans le tutoriel mosh, un compte utilisateur individuel a été sélectionné, ce qui a créé un contexte de base de données dans le modèle. Assurez-vous également qu'EntityFramework est installé dans le gestionnaire de packages Nuget. enter image description here

0
Bukunmi

J'ai eu ce même problème. J'ai même essayé plus haut d'activer les migrations même si je l'ai déjà fait. Mais cela continue à donner la même erreur. Ensuite, j'ai dû utiliser le commutateur force pour résoudre ce problème. Je suis sûr que cela aidera dans le cas de quelqu'un d'autre ainsi que dans la mesure du possible. 

Après avoir activé la migration avec force, vous devez mettre à jour votre base de données (assurez-vous que le projet par défaut est défini correctement). Sinon, vous rencontrerez un autre problème, par exemple les migrations explicites sont en attente.

Ensuite, exécutez simplement vos add-migrations ou toute autre commande, cela devrait fonctionner.

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

Assurez-vous que vous utilisez la même version d'Entity Framework dans tous les projets utilisant le gestionnaire de packages NuGet.

Les mises à jour récentes de Windows peuvent avoir installé une version plus récente d'Entity Framework dans votre projet actif.

Contexte: Vers le 16 mars 2016, j'ai commencé à rencontrer cette erreur lorsque j'essayais d'ajouter des migrations à un projet pour lequel j'avais déjà activé les migrations et où j'avais effectué des migrations avec succès.

J'ai remarqué que vers le 10 mars, une nouvelle version stable d'Entity Framework 6 avait été publiée. 

Si j'ai spécifié le paramètre -ContextTypeName dans la commande enable-migrations, une erreur s'est produite indiquant que les migrations étaient déjà activées.

Résolution:

1) Outils -> Gestionnaire de packages Nuget -> Gérer les packages Nuget pour la solution

2) (Je ne suis pas sûr que cette étape soit nécessaire, mais ..) J'ai mis à jour ma version du gestionnaire de paquets Nuget vers la dernière version. De plus, après la mise à jour de ma version de Nuget Package Manager, j'ai dû redémarrer Visual Studio à deux reprises avant que la ligne de commande NuGet ne fonctionne correctement.

3) Outils -> Gestionnaire de packages Nuget -> Gérer les packages de Nuget pour la solution -> Rechercher les packages installés -> Type Entity Framework

une. Vous pouvez y voir plus d’une version d’Entity Framework.

b. Cliquez sur Gérer sur chaque version d'Entity Framework et vérifiez que vos projets utilisent la version SAME d'Entity Framework. 

  • Décochez la version de Entity Framework que vous n'utilisez pas et pour la version de Entity Framework que vous utilisez, assurez-vous qu'elle est cochée dans vos projets qui en ont besoin.

De nouveau, comme indiqué à l'étape 2, j'ai dû redémarrer Visual Studio à deux reprises pour que la console NuGet Package Manager fonctionne correctement après la mise à jour de ma version de NuGet Package Manager. Une erreur s'est produite lors du premier démarrage de la console et "Une exception appelant createinstancefrom avec 8 arguments n'a pas pu charger le fichier ou l'assembly EntitéFramework" lors de l'exécution de la commande enable-migrations la deuxième fois.

Redémarrer Visual Studio semble toutefois résoudre ces problèmes. 

0
WWC

Merci pour les suggestions, j'ai résolu le problème en combinant toutes les solutions ici. Au début, j'ai créé le modèle DbContext:

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

Après avoir créé la classe dbcontext, j'ai exécuté la commande enable-migration avec le nom de projet:enable-migrations -ProjectName YourProjectName

0
user1407955

Cette erreur est due au fait que le compilateur n'obtient pas la classe 'Context' dans votre application. Donc, vous pouvez l'ajouter manuellement par Ajouter -> Classe et en hériter avec la classe 'DbContext' Par exemple:

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

Comment mettre à jour la table et la colonne dans mvc en utilisant l'entité framework code première approche

1: outil> console du gestionnaire de paquets

2: sélection du projet en cours où la classe de contexte existe

3: Activer la migration à l'aide de la commande suivante PM > enable-migrations 

4: Ajoutez le nom du dossier de migration à l’aide de la commande suivante PM > add-migration MyMigrationName

4: Maintenant, mettez à jour la base de données en suivant la commande PM > update-database

0
Harishanker Maurya