web-dev-qa-db-fra.com

Peut-on exécuter un script SQL en utilisant les premières migrations de code?

Pouvons-nous exécuter un script SQL en utilisant le code des premières migrations?

Je découvre d'abord le code et si je veux enregistrer mes modifications dans un fichier de script SQL avant la commande update-database de la migration, est-ce possible?

Si possible, veuillez indiquer les étapes pour y parvenir. De plus, si un script est généré, est-il possible que je puisse exécuter ce script en utilisant la migration?

41
Manprit Singh

Vous devez d'abord créer une migration.

Add-Migration RunSqlScript

Ensuite, dans le fichier de migration généré, vous pouvez écrire votre code SQL.

// PLAIN SQL
Sql("UPDATE dbo.Table SET Created = GETDATE()");

// FROM FILE
var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Custom.sql"); 
Sql(File.ReadAllText(sqlFile));

Alors tu cours

Update-Database
67
Rikard

Ce que j'aime faire, c'est incorporer le script SQL en tant que ressource dans Assembly et utiliser la méthode SqlResource. J'ai testé cette approche avec Visual Studio 2017 15.5.6.

Vous devez d’abord créer un fichier de migration:

  1. Dans Visual Studio, assurez-vous de définir comme projet de démarrage le projet dans lequel votre DbContext est défini.
  2. Dans Visual Studio, ouvrez le PMC: Affichage -> Autres fenêtres -> Console du gestionnaire de packages
  3. Dans PMC Définissez le projet par défaut sur le projet qui contient le DbContext
  4. Si vous avez à la fois EF Core et EF 6.x installés:

    EntityFramework\Add-Migration RunSqlScript

  5. Si vous n’avez que EF 6.x installé:

    Add-Migration RunSqlScript

Ajouter un script SQL dans le dossier de migration (je le nomme avec le même préfixe que le fichier de migration)

Migration folder in the Solution Explorer

Dans la fenêtre Propriétés du fichier, assurez-vous que l'action de construction est "Ressource incorporée". Notez qu'il n'est pas nécessaire de copier dans le dossier de sortie, car le script SQL sera incorporé à l'Assemblée.

Mettre à jour la méthode Up dans la migration RunSqlScript

public override void Up()
{
    string sqlResName = typeof(RunSqlScript).Namespace  + ".201801310940543_RunSqlScript.sql";
    this.SqlResource(sqlResName );
}

J'espère que ça aide

23

Comme SQL, nous avons une autre méthode SqlFile. vous pouvez directement l'utiliser.

7
mongesh madhavan

Pour .NET Core et EF Core, vous pouvez faire quelque chose comme cela dans les migrations.

protected override void Up(MigrationBuilder migrationBuilder)
{
   var schema = "starter_core";
   migrationBuilder.Sql($"INSERT INTO [{schema}].[Roles] ([Name]) VALUES ('transporter')");
}
0
Monomachus