J'utilise EF 6.1
et j'ai activé la première migration du code dans mon projet en
Enable-Migrations
Add-Migration InitializeDb -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"
Update-Database -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" -verbose -script
Lorsque je spécifie ma ConnectionString
, ConnectionProviderName
explicitement avec Add-Migration
et Update-database
dans la console du gestionnaire de packages it fonctionne correctement:
Add-migration updateXtable -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"
mais quand j'utilise Add-Migration
sans informations supplémentaires:
add-migration updateXtable
J'ai l'erreur suivante:
Impossible de générer une migration explicite car les migrations explicites suivantes sont en attente: [201408300955376_InitializeDb, 201408311028404_Test]. Appliquez les migrations explicites en attente avant de tenter de générer une nouvelle migration explicite.
Donc, je dois utiliser la commande suivante chaque fois que j'ai besoin de mettre à jour ma base de données:
Add-Migration UpdateXTable -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4"
Update-Database -ConnectionProviderName System.Data.SqlClient -ConnectionString "Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" -verbose -script
C'est mon projet (qui contient mon fichier DbContext
) app.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="ERPContext" connectionString="Data Source=myServer;Initial Catalog=myDb;Persist Security Info=True;User ID=sa;password=******;application name = L4" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>
Est-ce que quelqu'un sait où est le problème?
Finalement j'ai trouvé le problème! As Mohamad Bataineh a déclaré dans ce fil (voir les réponses)
Dans votre classe DbContext, vous devez spécifier le constructeur de la classe de base avec le nom approprié pour votre source SQL. Par exemple, nom = MyDBEntities
Dans l'autre mot, j'ai changé le constructeur de mon dbcontext existant
public MyDbContext()
{
}
À
public MyDbContext(): base("name=ERPContext")
{
}
Pour résoudre ce problème, j'ai changé mon projet par défaut en celui avec le app.config
contenant la chaîne de connexion appropriée.
Cela aurait dû être évident, puisque le système détectait aucune des migrations appliquées - un signe évident qu'il ne trouvait pas la base de données, une raison évidente étant que la chaîne de connexion (comme conclu).
"Le recul est 20/20".
J'avais aussi cette erreur. En plus de définir correctement le projet par défaut (comme indiqué par ANeves), je devais également définir le projet avec la chaîne de connexion en tant que projet de démarrage dans l'Explorateur de solutions. Une fois que j'ai réglé correctement les deux, l'erreur a disparu.
J'ai pu supprimer le message en supprimant la migration correspondante dans mon dossier Migrations (dans l'Explorateur de solutions), puis en ajoutant la nouvelle migration et en mettant à jour la base de données.
Supprimez simplement ce dossier de migration de la migration qui affiche une erreur et ne met pas à jour la base de données. Ensuite, ajoutez à nouveau la migration. Ça va marcher.
Dans mon cas, l'adresse IP de mon poste de travail n'a pas été ajoutée aux exceptions du pare-feu de SQL Server.