web-dev-qa-db-fra.com

mettre à jour la base de données à partir de la console du gestionnaire de paquets dans le premier environnement de code

Code premier environnement

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. 

commandes

PM> Install-Package EntityFramework
  1. En utilisant cette commande, j'installe Entity Framework avec succès.

     PM> Enable-Migrations
    
  2. En utilisant cette commande, le fichier de migration a été créé dans mon projet.

     PM> Update-Database
    
  3. En utilisant cette commande, je peux mettre à jour la table mais j’ai un problème ici.

Erreur

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.

Le doute est là

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 ?

18
vinodh

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
17
Andrey Molotkov

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.

4
toddmo

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>());
    }
    ...
2
Steve Greene

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. 

0
RWC

Vous devez mettre à jour SSDT Allez dans outils> extension et mises à jour> mises à jour> outils de données du serveur SQL

0
aya mourad