From a5524a700594b1642d0ace516f4f77d5fa5edb25 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 7 Sep 2022 11:38:18 +0800 Subject: [PATCH] Add `SeedInSeparateUowAsync` method. --- .../Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs | 16 ++++++++++++---- .../Volo/Abp/Data/DataSeederExtensions.cs | 5 +++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs index 0f930d1f70..8b01bcde77 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs @@ -25,13 +25,21 @@ public class DataSeeder : IDataSeeder, ITransientDependency { using (var scope = ServiceScopeFactory.CreateScope()) { + var manager = scope.ServiceProvider.GetRequiredService(); foreach (var contributorType in Options.Contributors) { - var contributor = (IDataSeedContributor)scope - .ServiceProvider - .GetRequiredService(contributorType); + using (var uow = manager.Begin( + requiresNew: context.Properties.ContainsKey(nameof(DataSeederExtensions.SeedInSeparateUowAsync)), + isTransactional: true)) + { + var contributor = (IDataSeedContributor)scope + .ServiceProvider + .GetRequiredService(contributorType); - await contributor.SeedAsync(context); + await contributor.SeedAsync(context); + + await uow.CompleteAsync(); + } } } } diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs index 83fa974d85..8d8d7126c9 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeederExtensions.cs @@ -9,4 +9,9 @@ public static class DataSeederExtensions { return seeder.SeedAsync(new DataSeedContext(tenantId)); } + + public static Task SeedInSeparateUowAsync(this IDataSeeder seeder, Guid? tenantId = null) + { + return seeder.SeedAsync(new DataSeedContext(tenantId).WithProperty(nameof(DataSeederExtensions.SeedInSeparateUowAsync), true)); + } }