-
Notifications
You must be signed in to change notification settings - Fork 767
Closed
Labels
Milestone
Description
您的功能请求与现有问题有关吗?请描述
给初始化种子基类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},
};
}
//...
}