using System.Runtime.CompilerServices; using Bit.Core.Utilities; using Microsoft.EntityFrameworkCore.Migrations; namespace Bit { // This file is a manual addition to a project that it helps, a project that chooses to compile it // should have a projet reference to Core.csproj and a package reference to Microsoft.EntityFrameworkCore.Design // The reason for this is that if it belonged to it's own library you would have to add manual references to the above // and manage the version for the EntityFrameworkCore package. This way it also doesn't create another dll // To include this you can view examples in the MySqlMigrations and PostgresMigrations .csproj files. // public static class MigrationBuilderExtensions { /// /// Reads an embedded resource for it's SQL contents and formats it with the specified direction for easier custom migration steps /// /// The MigrationBuilder instance the sql should be applied to /// The file name portion of the resource name, it is assumed to be in a Scripts folder /// The direction of the migration taking place public static void SqlResource(this MigrationBuilder migrationBuilder, string resourceName, [CallerMemberName] string dir = null) { var formattedResourceName = string.IsNullOrEmpty(dir) ? resourceName : string.Format(resourceName, dir); migrationBuilder.Sql(CoreHelpers.GetEmbeddedResourceContentsAsync( $"Scripts.{formattedResourceName}")); } } }