Je travaille avec Entity Framework 5.0 Code First Migrations, et j'ai un problème avec l'exécution de Update-Database. Il est indiqué qu'il y a des modifications de modèle en attente, mais la base devrait être à jour.
Add-Migration SomeMigrationName
et il crée un fichier... cependant, il crée un fichier qui est essentiellement le même, une duplication d'une migration antérieure (si j'essaie de mettre à jour la base de données à nouveau sur ce fichier, il échoue avec des problèmes liés à la tentative de déposer une contrainte inexistante). De plus, j'ai pu confirmer que la migration "originale" a été exécutée en me basant à la fois sur le modèle de données de la BD et sur la présence d'un enregistrement dans la table __MigrationHistory !
Si je supprime toute la base de données, et que je relance toutes les migrations, automatiquement ou manuellement, j'ai le même problème.
Le fichier de migration "original" que j'avais est le suivant :
public partial class RenameLinkColumns : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User");
DropIndex("dbo.Listing", new[] { "OfferedByUserId" });
AddColumn("dbo.Listing", "ListedByUserId", c => c.Int(nullable: false));
AddForeignKey("dbo.Listing", "ListedByUserId", "dbo.User", "UserId", cascadeDelete: true);
CreateIndex("dbo.Listing", "ListedByUserId");
DropColumn("dbo.Listing", "OfferedByUserId");
}
public override void Down()
{
AddColumn("dbo.Listing", "OfferedByUserId", c => c.Int(nullable: false));
DropIndex("dbo.Listing", new[] { "ListedByUserId" });
DropForeignKey("dbo.Listing", "ListedByUserId", "dbo.User");
DropColumn("dbo.Listing", "ListedByUserId");
CreateIndex("dbo.Listing", "OfferedByUserId");
AddForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User", "UserId", cascadeDelete: true);
}
}
Lorsque j'ai relancé l'ajout de migration, les méthodes Up/Down de ce fichier sont exactement les mêmes que celles-ci.
Je suis assez impressionné par le fait que les migrations ont été correctement capables de détecter que j'avais renommé une colonne ForeignKey ; mais est-ce que c'est ce qui cause l'étranglement ?
Il semble qu'il existe un moyen de contourner le problème : J'ai supprimé la base de données et tous les fichiers de migration, et créé une nouvelle migration "initiale", mais je préférerais ne pas le faire si possible.
Mise à jour : C'était no la dernière migration qui a causé ce problème, mais le problème a commencé après une fusion (je travaille seul, mais je simule un travail d'équipe sur des branches pour en apprendre davantage sur git aussi), et en essayant de mettre la base de données en phase avec la fusion. Ce problème pourrait-il provenir du fait de placer les migrations dans un ordre particulier après une fusion - bien qu'il ait été noté, les migrations a fait fonctionnent comme prévu dans l'ordre où ils ont été exécutés lorsque je leur ai donné une BD vide.
De plus, cette migration originale nécessitait un ajustement manuel lorsque les tables contenaient des données, car les données devaient être copiées de l'ancienne colonne vers la nouvelle. Cependant, j'ai testé ce fichier avec et sans mes modifications manuelles dans ce fichier, et j'ai toujours rencontré le comportement indiqué.