J'essaie de mettre à jour la base de données à partir de la console du gestionnaire de packages. Si ma classe de domaine change, je dois supprimer et créer la base de données. Au lieu de supprimer la base de données, comment puis-je mettre à jour la base de données?
J'ai déjà essayé en lisant quelques blogs dans google.
PM> Install-Package EntityFramework
En utilisant cette commande, j'installe Entity Framework avec succès.
PM> Enable-Migrations
En utilisant cette commande, le fichier de migration a été créé dans mon projet.
PM> Update-Database
En utilisant cette commande, je peux mettre à jour la table mais j’ai un problème ici.
Spécifiez l'indicateur '-Verbose' pour afficher les instructions SQL appliquées à la base de données cible . System.Data.SqlClient.SqlException (0x80131904): une erreur liée au réseau ou spécifique à une instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions à distance.
Parfois, il peut être mis à jour si un seul champ est modifié dans POCO Class. Par exemple, j'ai mis à jour le plus de numéros de classe de domaine, Comment puis-je mettre à jour la base de données à partir de la console du gestionnaire de packages? Une idée ?
Vous pouvez spécifier une chaîne de connexion via le paramètre ConnectionString
:
Update-Database -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose
Aussi, vous devez utiliser ce paramètre avec la même valeur pour la commande Add-Migration
:
Add-Migration Version_Name -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose
J'ai utilisé
Enable-Migrations -EnableAutomaticMigrations -Force
puis
Update-Database
Et cela a migré mes modifications (colonnes supplémentaires) tout en préservant mes données de test. Je pense que c'est l'option la plus paresseuse lors du prototypage.
On dirait que vous avez plusieurs problèmes. En ce qui concerne ne pas vouloir supprimer et recréer la base de données, cela est déterminé par votre initialiseur de base de données. Si vous souhaitez utiliser les migrations, changez-le en MigrateDatabaseToLatestVersion. http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm
Deuxièmement, peu importe le nombre de champs que vous modifiez, ils seront intégrés dans une migration unique en fonction des modifications apportées depuis la dernière migration.
Troisièmement, comme les autres l'ont souligné, il semble que vous ayez un problème de chaîne de connexion. Bien que vous puissiez ajouter cela à Add-Migration et à Update-Migration, je le corrigerais probablement dans l'application. Je mets le mien dans le constructeur de mon contexte qui pointe vers mon fichier de configuration (web.config for ASP.NET).
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
: base("MyConnection", throwIfV1Schema: false)
{
Database.SetInitializer<ApplicationDbContext>(new MigrateDatabaseToLatestVersion<ApplicationDbContext, MyObjextContextMigration>());
}
...
Où mettre la chaîne de connexion?
Vous n'avez pas besoin de le spécifier avec chaque commande de la console du gestionnaire de packages. Vous pouvez le placer dans appsettings.json dans le projet où réside votre classe DbContext (lisez "à partir de la classe dérivée DbContext").
{
"ConnectionStrings": {
"MyConnectionString": "Server=yourServer;Port=5432;Database=yourDatabase;User Id=yourDatabaseUsername;Password=yourDatabasePassword;"
}
}
Il sera utilisé pour les migrations.
Important: Si vous avez plusieurs projets dans votre solution, vous devez sélectionnez le projet dans la liste déroulante "Projet par défaut" (dans la console du gestionnaire de packages) et vous devez définir le projet comme projet de démarrage ( dans l'explorateur de solutions).
Sinon, vous pourriez utiliser le mauvais fichier appsettings.json avec une chaîne de connexion incorrecte/différente.
C’était mon expérience avec EF Core 2.1 et s’appliquait probablement aux autres versions d’EF.
Vous devez mettre à jour SSDT Allez dans outils> extension et mises à jour> mises à jour> outils de données du serveur SQL