Je travaille sur un projet utilisant MVC4 dans Visual Studio 2012 et j'ai ajouté une colonne dans le tableau.
Maintenant, lorsque je veux déboguer mon projet, l'erreur indique d'utiliser la migration pour mettre à jour ma base de données.
Ce que je dois faire?
J'ai beaucoup cherché et trouvé des méthodes comme:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<ResTabelaIndex>(null);
}
mais je ne sais pas comment ni où l'implémenter ... J'ai essayé dans app_start
, global.asax
etc...
Ce que j'ai trouvé, c'était d'activer les migrations directement dans la console depuis le nuget.
Mais je ne peux pas faire fonctionner ça.
Commandes que j'utilise:
Enable-Migrations -EnableAutomaticMigrations
==> La console indique que plus d'un contexte a été trouvé. Pour activer l'utilisation, Enable-Migrations -ContextTypeName NameOfTheNamespace.Models.DefaultConnection
Mais je ne sais pas quel est le -ContextTypeName
, ont beaucoup essayé mais ne comprenaient pas.
My Model Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.Migrations;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Infrastructure;
namespace Vista.Models
{
public class TabelaIndex
{
public int ID { get; set; }
public string n_empresa { get; set; }
public string titulo{ get; set; }
public string url { get; set; }
public string imagens { get; set; }
}
public class DefaultConnection : DbContext
{
public DbSet<TabelaIndex> ResTabelaIndex { get; set; }
}
}
L'erreur dit que vous avez deux contextes. Lorsque vous créez un projet pour la première fois à l'aide de MVC 4, Visual Studio crée un contexte pour votre SimpleMembership
par défaut (vérifiez Models/Account.cs) ou effectuez une ctrl+f
pour UsersContext
, vous pouvez simplement supprimer ce fichier si vous n'utilisez pas SimpleMembership
. Après avoir supprimé ce contexte, continuez et ajoutez ce qui suit à votre classe DefaultConnection
:
protected override void OnModelCreating(DbModelBuilder builder)
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DefaultConnection,Configuration>());
}
Si vous avez correctement activé les migrations, vous devriez également avoir un dossier appelé Migrations
et à l'intérieur une classe Configuration
, son constructeur devrait ressembler à ceci (si vous souhaitez activer les migrations automatiques):
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
Commandes:
enable-migrations default context
add-migration InitialCreate
(pour générer un instantané)add-migration InitialCreate
(pour appliquer un instantané)update-database
update-database -verbose
Une explication détaillée sera ici: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html
Essayez de taper ceci dans la console:
Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection
Vista.Models.DefaultConnection est votre contexte (la classe qui hérite de DbContext).
Si vous avez de petits changements pas besoin de migration. Vous pouvez ajouter une colonne à n'importe quelle table de la base de données avec le script sql et ajouter une propriété au modèle et supprimer la table de métadonnées. (sauvegarder la base de données tout d'abord sans aucun doute).
Ou vous pouvez utiliser des migrations comme ceci: aspnet-mvc-4-entity-framework-scaffolding-and-migrations