From 9eff69dc96a8dcbb474b73e0eca9cba34522e619 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 24 May 2019 17:23:20 +0300 Subject: [PATCH] Fixed #1123: Create a separated console application to migrate database and seed data. --- ...eSwitchEntityFrameworkCoreToMongoDbStep.cs | 33 ++++++++++-- templates/mvc/MyCompanyName.MyProjectName.sln | 9 +++- ...ompanyName.MyProjectName.DbMigrator.csproj | 32 +++++++++++ .../MyProjectNameDbMigratorModule.cs | 15 ++++++ .../Program.cs | 53 +++++++++++++++++++ .../appsettings.json | 5 ++ .../Data/DataSeedHelper.cs | 23 -------- .../Data/IMyProjectNameDbSchemaMigrator.cs | 9 ++++ .../Data/MyProjectNameDbMigrationService.cs | 39 ++++++++++++++ .../Data/NullMyProjectNameDbSchemaMigrator.cs | 16 ++++++ ...meworkCoreMyProjectNameDbSchemaMigrator.cs | 24 +++++++++ ...meEntityFrameworkCoreDbMigrationsModule.cs | 16 ++++++ .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 8 +-- .../MyProjectNameWebModule.cs | 8 +-- ...rojectNameEntityFrameworkCoreTestModule.cs | 2 +- .../MyProjectNameTestBaseModule.cs | 13 ++++- 17 files changed, 260 insertions(+), 47 deletions(-) create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json delete mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/DataSeedHelper.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs create mode 100644 templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreDbMigrationsModule.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Mvc/MvcTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Mvc/MvcTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs index 4bbe498042..cffe19d05f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Mvc/MvcTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Mvc/MvcTemplateSwitchEntityFrameworkCoreToMongoDbStep.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Mvc "/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs", "MyCompanyName.MyProjectName.EntityFrameworkCore", "MyCompanyName.MyProjectName.MongoDb", - "MyProjectNameEntityFrameworkCoreModule", + "MyProjectNameEntityFrameworkCoreDbMigrationsModule", "MyProjectNameMongoDbModule" ); @@ -44,7 +44,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Mvc "/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs", "MyCompanyName.MyProjectName.EntityFrameworkCore", "MyCompanyName.MyProjectName.MongoDb", - "MyProjectNameEntityFrameworkCoreModule", + "MyProjectNameEntityFrameworkCoreDbMigrationsModule", "MyProjectNameMongoDbModule" ); @@ -67,7 +67,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Mvc "/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs", "MyCompanyName.MyProjectName.EntityFrameworkCore", "MyCompanyName.MyProjectName.MongoDb", - "MyProjectNameEntityFrameworkCoreModule", + "MyProjectNameEntityFrameworkCoreDbMigrationsModule", "MyProjectNameMongoDbModule" ); @@ -76,8 +76,31 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Mvc "/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json" ); + //MyCompanyName.MyProjectName.DbMigrator + + ChangeProjectReference( + context, + "/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj", + "EntityFrameworkCore.DbMigrations", + "MongoDB" + ); + + ChangeModuleDependency( + context, + "/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs", + "MyCompanyName.MyProjectName.EntityFrameworkCore", + "MyCompanyName.MyProjectName.MongoDb", + "MyProjectNameEntityFrameworkCoreDbMigrationsModule", + "MyProjectNameMongoDbModule" + ); + + ChangeConnectionStringToMongoDb( + context, + "/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json" + ); + //MyCompanyName.MyProjectName.Domain.Tests - + ChangeProjectReference( context, "/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj", @@ -90,7 +113,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Mvc "/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs", "MyCompanyName.MyProjectName.EntityFrameworkCore", "MyCompanyName.MyProjectName.MongoDb", - "MyProjectNameEntityFrameworkCoreTestModule", + "MyProjectNameEntityFrameworkCoreDbMigrationsModule", "MyProjectNameMongoDbTestModule" ); } diff --git a/templates/mvc/MyCompanyName.MyProjectName.sln b/templates/mvc/MyCompanyName.MyProjectName.sln index fed1712169..a0ab11d317 100644 --- a/templates/mvc/MyCompanyName.MyProjectName.sln +++ b/templates/mvc/MyCompanyName.MyProjectName.sln @@ -45,7 +45,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.MongoDB.Tests", "test\MyCompanyName.MyProjectName.MongoDB.Tests\MyCompanyName.MyProjectName.MongoDB.Tests.csproj", "{6015D17B-104B-4EC2-A9B7-D8A40C891458}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp", "test\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj", "{EF480016-9127-4916-8735-D2466BDBC582}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp", "test\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj", "{EF480016-9127-4916-8735-D2466BDBC582}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.DbMigrator", "src\MyCompanyName.MyProjectName.DbMigrator\MyCompanyName.MyProjectName.DbMigrator.csproj", "{AA94D832-1CCC-4715-95A9-A483F23A1A5D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -133,6 +135,10 @@ Global {EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.Build.0 = Debug|Any CPU {EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.Build.0 = Release|Any CPU + {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -158,6 +164,7 @@ Global {E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} {6015D17B-104B-4EC2-A9B7-D8A40C891458} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} {EF480016-9127-4916-8735-D2466BDBC582} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} + {AA94D832-1CCC-4715-95A9-A483F23A1A5D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj new file mode 100644 index 0000000000..967a3cad7c --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj @@ -0,0 +1,32 @@ + + + + + + Exe + netcoreapp2.2 + + + + + + + + + PreserveNewest + Always + + + + + + + + + + + + + + + diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs new file mode 100644 index 0000000000..463a7b18a6 --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs @@ -0,0 +1,15 @@ +using MyCompanyName.MyProjectName.EntityFrameworkCore; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyProjectName.DbMigrator +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule) + )] + public class MyProjectNameDbMigratorModule : AbpModule + { + + } +} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs new file mode 100644 index 0000000000..1a9175bbee --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs @@ -0,0 +1,53 @@ +using System.IO; +using Microsoft.Extensions.DependencyInjection; +using MyCompanyName.MyProjectName.Data; +using Serilog; +using Serilog.Events; +using Volo.Abp; +using Volo.Abp.Threading; + +namespace MyCompanyName.MyProjectName.DbMigrator +{ + class Program + { + static void Main(string[] args) + { + ConfigureLogging(); + + using (var application = AbpApplicationFactory.Create(options => + { + options.UseAutofac(); + options.Services.AddLogging(c => c.AddSerilog()); + })) + { + application.Initialize(); + + AsyncHelper.RunSync( + () => application + .ServiceProvider + .GetRequiredService() + .MigrateAsync() + ); + + application.Shutdown(); + } + } + + private static void ConfigureLogging() + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning) +#if DEBUG + .MinimumLevel.Override("MyCompanyName.MyProjectName", LogEventLevel.Debug) +#else + .MinimumLevel.Override("MyCompanyName.MyProjectName", LogEventLevel.Information) +#endif + .Enrich.FromLogContext() + .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt")) + .WriteTo.Console() + .CreateLogger(); + } + } +} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json new file mode 100644 index 0000000000..404c4f20d8 --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "Default": "Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" + } +} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/DataSeedHelper.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/DataSeedHelper.cs deleted file mode 100644 index 8c31db364c..0000000000 --- a/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/DataSeedHelper.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Data; -using Volo.Abp.Threading; - -namespace MyCompanyName.MyProjectName.Data -{ - public static class DataSeedHelper - { - public static void Seed(ApplicationInitializationContext context) - { - AsyncHelper.RunSync(async () => - { - using (var scope = context.ServiceProvider.CreateScope()) - { - await scope.ServiceProvider - .GetRequiredService() - .SeedAsync(); - } - }); - } - } -} \ No newline at end of file diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs new file mode 100644 index 0000000000..34c4cf76aa --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace MyCompanyName.MyProjectName.Data +{ + public interface IMyProjectNameDbSchemaMigrator + { + Task MigrateAsync(); + } +} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs new file mode 100644 index 0000000000..f6fd008e66 --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs @@ -0,0 +1,39 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace MyCompanyName.MyProjectName.Data +{ + public class MyProjectNameDbMigrationService : ITransientDependency + { + public ILogger Logger { get; set; } + + private readonly IDataSeeder _dataSeeder; + private readonly IMyProjectNameDbSchemaMigrator _dbSchemaMigrator; + + public MyProjectNameDbMigrationService( + IDataSeeder dataSeeder, + IMyProjectNameDbSchemaMigrator dbSchemaMigrator) + { + _dataSeeder = dataSeeder; + _dbSchemaMigrator = dbSchemaMigrator; + + Logger = NullLogger.Instance; + } + + public async Task MigrateAsync() + { + Logger.LogInformation("Started database migrations..."); + + Logger.LogInformation("Migrating database schema..."); + await _dbSchemaMigrator.MigrateAsync(); + + Logger.LogInformation("Executing database seed..."); + await _dataSeeder.SeedAsync(); + + Logger.LogInformation("Successfully completed database migrations."); + } + } +} \ No newline at end of file diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs new file mode 100644 index 0000000000..417be59326 --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace MyCompanyName.MyProjectName.Data +{ + /* This is used if database provider does't define + * IMyProjectNameDbSchemaMigrator implementation. + */ + public class NullMyProjectNameDbSchemaMigrator : IMyProjectNameDbSchemaMigrator, ITransientDependency + { + public Task MigrateAsync() + { + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs new file mode 100644 index 0000000000..7064697d1a --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs @@ -0,0 +1,24 @@ +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using MyCompanyName.MyProjectName.Data; +using Volo.Abp.DependencyInjection; + +namespace MyCompanyName.MyProjectName.EntityFrameworkCore +{ + [Dependency(ReplaceServices = true)] + public class EntityFrameworkCoreMyProjectNameDbSchemaMigrator + : IMyProjectNameDbSchemaMigrator, ITransientDependency + { + private readonly MyProjectNameMigrationsDbContext _dbContext; + + public EntityFrameworkCoreMyProjectNameDbSchemaMigrator(MyProjectNameMigrationsDbContext dbContext) + { + _dbContext = dbContext; + } + + public async Task MigrateAsync() + { + await _dbContext.Database.MigrateAsync(); + } + } +} \ No newline at end of file diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreDbMigrationsModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreDbMigrationsModule.cs new file mode 100644 index 0000000000..ed9d6dfb08 --- /dev/null +++ b/templates/mvc/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreDbMigrationsModule.cs @@ -0,0 +1,16 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyProjectName.EntityFrameworkCore +{ + [DependsOn( + typeof(MyProjectNameEntityFrameworkCoreModule) + )] + public class MyProjectNameEntityFrameworkCoreDbMigrationsModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAbpDbContext(); + } + } +} diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index f8a9f8dd1e..8f883bead9 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -23,7 +23,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAutofacModule), typeof(AbpAspNetCoreMultiTenancyModule), typeof(MyProjectNameApplicationModule), - typeof(MyProjectNameEntityFrameworkCoreModule) + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 6f9efea814..a583958070 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -4,7 +4,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; -using MyCompanyName.MyProjectName.Data; using MyCompanyName.MyProjectName.EntityFrameworkCore; using MyCompanyName.MyProjectName.Localization; using MyCompanyName.MyProjectName.MultiTenancy; @@ -30,7 +29,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAutofacModule), typeof(AbpAccountWebIdentityServerModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(MyProjectNameEntityFrameworkCoreModule) + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule) )] public class MyProjectNameIdentityServerModule : AbpModule { @@ -116,11 +115,6 @@ namespace MyCompanyName.MyProjectName app.UseAbpRequestLocalization(); app.UseAuditing(); app.UseMvcWithDefaultRouteAndArea(); - - /* Seeding in the application startup can be a problem in a clustered environment. - * See https://github.com/abpframework/abp/issues/1123 - */ - DataSeedHelper.Seed(context); } } } diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 8e997b7127..2e737fca23 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -7,7 +7,6 @@ using MyCompanyName.MyProjectName.Menus; using Swashbuckle.AspNetCore.Swagger; using System.IO; using Microsoft.Extensions.Configuration; -using MyCompanyName.MyProjectName.Data; using MyCompanyName.MyProjectName.Localization; using MyCompanyName.MyProjectName.MultiTenancy; using Volo.Abp; @@ -35,7 +34,7 @@ namespace MyCompanyName.MyProjectName [DependsOn( typeof(MyProjectNameHttpApiModule), typeof(MyProjectNameApplicationModule), - typeof(MyProjectNameEntityFrameworkCoreModule), + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), typeof(AbpAutofacModule), typeof(AbpIdentityWebModule), typeof(AbpAccountWebIdentityServerModule), @@ -204,11 +203,6 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); app.UseMvcWithDefaultRouteAndArea(); - - /* Seeding in the application startup can be a problem in a clustered environment. - * See https://github.com/abpframework/abp/issues/1123 - */ - DataSeedHelper.Seed(context); } } } diff --git a/templates/mvc/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs b/templates/mvc/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs index 86a7d55706..c3c74ec4bf 100644 --- a/templates/mvc/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs +++ b/templates/mvc/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs @@ -10,7 +10,7 @@ using Volo.Abp.Modularity; namespace MyCompanyName.MyProjectName.EntityFrameworkCore { [DependsOn( - typeof(MyProjectNameEntityFrameworkCoreModule), + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), typeof(MyProjectNameTestBaseModule) )] public class MyProjectNameEntityFrameworkCoreTestModule : AbpModule diff --git a/templates/mvc/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs b/templates/mvc/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs index 0c2d22c0e0..6304627e31 100644 --- a/templates/mvc/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs +++ b/templates/mvc/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs @@ -1,10 +1,11 @@ using Microsoft.Extensions.DependencyInjection; -using MyCompanyName.MyProjectName.Data; using Volo.Abp; using Volo.Abp.Authorization; using Volo.Abp.Autofac; using Volo.Abp.BackgroundJobs; +using Volo.Abp.Data; using Volo.Abp.Modularity; +using Volo.Abp.Threading; namespace MyCompanyName.MyProjectName { @@ -33,7 +34,15 @@ namespace MyCompanyName.MyProjectName private static void SeedTestData(ApplicationInitializationContext context) { - DataSeedHelper.Seed(context); + AsyncHelper.RunSync(async () => + { + using (var scope = context.ServiceProvider.CreateScope()) + { + await scope.ServiceProvider + .GetRequiredService() + .SeedAsync(); + } + }); } } }