Skip to content

给种子数据基类SeedDataInitializerBase.SeedData添加ScopedProvider #231

@gmf520

Description

@gmf520

您的功能请求与现有问题有关吗?请描述

给初始化种子基类SeedDataInitializerBase的SeedData添加 ScopedProvider,方便在构建种子数据时拉取需要的父数据

old:

public abstract class SeedDataInitializerBase<TEntity, TKey>
{
        public void Initialize()
        {
            TEntity[] entities = SeedData();
            SyncToDatabase(entities);
        }

        protected abstract TEntity[] SeedData();

		//...
}

new:

public abstract class SeedDataInitializerBase<TEntity, TKey>
{
        public void Initialize()
        {
            _rootProvider.ExecuteScopedWork(provider =>
            {
                TEntity[] entities = SeedData(provider);
                SyncToDatabase(entities, provider);
                _logger.LogInformation($"同步 {entities.Length} 个“{typeof(TEntity)}”种子数据到数据库");
            });
        }

        protected abstract TEntity[] SeedData(IServiceProvider scopedProvider);

		//...
}

应用:

public class CodeModuleSeedDataInitializer : SeedDataInitializerBase<CodeModule, Guid>
{
    //...
    
    /// <summary>重写以提供要初始化的种子数据</summary>
    /// <returns></returns>
    protected override CodeModule[] SeedData(IServiceProvider scopedProvider)
    {
        IRepository<CodeProject, Guid> repository = scopedProvider.GetRequiredService<IRepository<CodeProject, Guid>>();
        CodeProject project = repository.GetFirst(m => m.Name == "示例项目");
        return new[]
        {
            new CodeModule(){Name = "Identity", Display = "身份认证", Order = 1, ProjectId = project.Id},
            new CodeModule(){Name = "Auth", Display = "权限授权", Order = 2, ProjectId = project.Id},
            new CodeModule(){Name = "Infos", Display = "信息", Order = 3, ProjectId = project.Id},
        };
    }

    //...
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Breaked Changes ⚡更新有破坏性,对现有业务实现有较大影响Feature 🔨新功能,新特性Finished ✔️实现并完工

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions