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?
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
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:
DbContext
est défini.Si vous avez à la fois EF Core et EF 6.x installés:
EntityFramework\Add-Migration RunSqlScript
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)
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
Comme SQL, nous avons une autre méthode SqlFile. vous pouvez directement l'utiliser.
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')");
}