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?
utilisez l'option -ProjectName dans la console du gestionnaire de packages:
Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
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é.
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.
Votre dbcontext est dans Toombu.DataAccess
Vous devez donc activer les migrations dans Toombu.DataAccess
.
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::
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.
}
}
}
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
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
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
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.
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.
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
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()
{
}
}
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