feat:添加种子数据

This commit is contained in:
陈淳
2023-04-19 16:35:47 +08:00
parent 654c7d650a
commit 2fd861025a
12 changed files with 2067 additions and 1 deletions

View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Infrastructure.Ddd.Repositories;
namespace Yi.Framework.Infrastructure.Data.DataSeeds
{
public abstract class AbstractDataSeed<TEntity> : IDataSeed<TEntity>
{
protected readonly IRepository<TEntity> _repository;
public AbstractDataSeed(IRepository<TEntity> repository)
{
_repository = repository;
}
/// <summary>
/// 简单种子数据,重写该方法即可
/// </summary>
/// <returns></returns>
public abstract List<TEntity> GetSeedData();
/// <summary>
/// 复杂数据,重写该方法即可
/// </summary>
/// <returns></returns>
public async virtual Task<bool> DataHandlerAsync()
{
return await _repository.InsertRangeAsync(GetSeedData());
}
/// <summary>
/// 这个用来处理判断是否数据库还存在数据
/// </summary>
/// <returns></returns>
public virtual async Task<bool> IsInvoker()
{
var p = await _repository.IsAnyAsync(x => true);
var p2 = await _repository.CountAsync(x => true);
if (await _repository.CountAsync(u => true) > 0)
{
return false;
}
return true;
}
/// <summary>
/// 完全自定义数据,处理该方法即可
/// </summary>
/// <returns></returns>
public async virtual Task<bool> InvokerAsync()
{
bool res = true;
if (await IsInvoker())
{
return await DataHandlerAsync();
}
return res;
}
}
}

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Furion;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
namespace Yi.Framework.Infrastructure.Data.DataSeeds
{
public static class DataSeedExtensions
{
public static async Task<IApplicationBuilder> UseDataSeedServer(this IApplicationBuilder builder)
{
if (!App.Configuration.GetSection("EnabledDataSeed").Get<bool>())
{
return builder;
}
var dataSeeds = builder.ApplicationServices.GetServices<IDataSeed>();
var iUnitOfWorkManager = builder.ApplicationServices.GetRequiredService<ISqlSugarClient>();
if (dataSeeds is not null)
{
//using (var uow = iUnitOfWorkManager.CreateContext())
//{
var res = await iUnitOfWorkManager.Ado.UseTranAsync(async () =>
{
foreach (var seed in dataSeeds)
{
await seed.InvokerAsync();
}
});
//var res = uow.Commit();
if (!res.IsSuccess)
{
throw new ApplicationException("种子数据初始化异常");
}
//}
}
return builder.UseMiddleware<DataFilterMiddleware>();
}
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Infrastructure.Data.DataSeeds
{
public interface IDataSeed
{
Task<bool> InvokerAsync();
}
public interface IDataSeed<TEntity> : IDataSeed
{
}
}