Le modèle de la sauvegarde de la "DataContext" contexte a changé depuis la base de données a été créé
Je suis en train d'utiliser le Premier Code avec les Migrations. Même si il n'y a aucune modification à mon modèle, je suis une exception. Quand j'ajoute une migration, le haut et le bas sont vides, mais j'obtiens une erreur d'exécution avec le message comme suit:
Une exception de type 'System.InvalidOperationException' s'est produite dans
EntityFramework.dll, mais n'a pas été traitée dans le code utilisateurInformations supplémentaires: Le modèle de la sauvegarde de la " MyDataContext contexte
a changé depuis la base de données a été créé. Pensez à utiliser le Premier Code
Les Migrations à la mise à jour de la base de données (http://go.microsoft.com/fwlink/?
Mon architecture est la suivante:
- DataAccess projet qui comprend le contexte, fluide configurations et les migrations code
- Projet de modèle qui contient les classes poco
- MVC, Web API et des projets qui contiennent chacune les connexions chaîne web respectifs.les fichiers de configuration.
En outre, j'ai le code suivant:
DbInitializer
public static MyDataContext Create()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDataAccess.MyDataContext, MyDataAccess.Migrations.Configuration>());
return new MyDataContext(ConfigurationManager.ConnectionStrings["MyDataContext"].ConnectionString, null);
}
J'ai commencé avec AutomaticMigrationsEnabled = false; dans la Configuration de la migration constructeur, que c'était ma compréhension que cela permettrait à l' (et besoin) de moi pour avoir plus de contrôle sur le moment où les migrations ont été appliquées. J'ai aussi essayé de mettre ce paramètre à true, mais avec le même résultat.
J'ai ajouté une nouvelle migration lors de la réception de cette erreur, et la méthode était vide. J'ai mis à jour la base de données pour cette nouvelle migration, et un dossier a été créé dans le _migrationHistory table, mais j'ai toujours le message d'erreur quand j'essaye d'exécuter l'application. Aussi, la graine de données n'a pas été ajouté à la base de données.
protected override void Seed(MyDataAccess.MyDataContext context)
{
IdentityResult ir;
var appDbContext = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(appDbContext));
ir = roleManager.Create(new IdentityRole("Admin"));
ir = roleManager.Create(new IdentityRole("Active"));
ir = roleManager.Create(new IdentityRole("InActive"));
var userNamager = new UserManager<User>(new UserStore<User>(appDbContext));
// assign default admin
var admin = new User { UserName = "administrator", Email = "[email protected]" };
ir = userNamager.Create(admin, "myp@55word");
ir = userNamager.AddToRole(admin.Id, "Admin");
}
où
public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext()
: base("MyDataContext", throwIfV1Schema: false)
{
}
...
La question: Si les Add-Migration n'est pas à voir un changement dans le modèle, pourquoi j'ai cette erreur quand je le lance? Pourquoi n'est-ce pas le code graine d'être touché? Comment puis-je résoudre ce problème, ou si cela ne peut pas être déterminé, comment puis-je déterminer la cause racine?
Vous devez vous connecter pour publier un commentaire.
Cela a fonctionné pour moi.
Aller à Gestionnaire de Package Console et lancez la mise a Jour de la Base de données -force
Je ne suis pas sûr si vous avez trouvé la réponse à votre problème, mais cette autre réponse que j'ai trouvé ici, en fait il l'a fait pour moi:
Entity Framework changement de modèle d'erreur
Fait, j'ai fini la suppression de la
__MigrationHistory
table dans SQL Server que je ne connaissais pas, il a été créé automatiquement.L'article parle aussi de la possibilité de ne pas générer d'elle, je pense que par l'utilisation de cette instruction:
Database.SetInitializer<MyDbContext>(null);
mais je n'ai pas utilisé, donc je ne sais pas si ça fonctionne comme çaJe parie que vos données de contexte n'est pas raccorder la chaîne de connexion.
Vérifier si elle n'est pas initialisée avec un localdb (quelque chose comme
(localdb)\v11.0
) et ne fonctionne pas avec ce que quand vous pourriez penser que c'est autre chose.Mon problème a fini par être un conflit entre les Migrations Automatiques est activé et l'initialiseur MigrateDatabaseToLatestVersion comme décrit ici.