using Blog.Core.Common;
using Blog.Core.Common.Helper;
using Blog.Core.Model.Models;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
namespace Blog.Core.Model.Models
{
public class FrameSeed
{
///
/// 生成Model层
///
/// sqlsugar实例
/// 数据库链接ID
/// 数据库表名数组,默认空,生成所有表
///
public static bool CreateModels(SqlSugarClient sqlSugarClient, string ConnId, string[] tableNames = null)
{
try
{
Create_Model_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.Model", "Blog.Core.Model.Models", tableNames, "");
return true;
}
catch (Exception)
{
return false;
}
}
///
/// 生成IRepository层
///
/// sqlsugar实例
/// 数据库链接ID
/// 数据库表名数组,默认空,生成所有表
///
public static bool CreateIRepositorys(SqlSugarClient sqlSugarClient, string ConnId, string[] tableNames = null)
{
try
{
Create_IRepository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.IRepository", "Blog.Core.IRepository", tableNames, "");
return true;
}
catch (Exception)
{
return false;
}
}
///
/// 生成 IService 层
///
/// sqlsugar实例
/// 数据库链接ID
/// 数据库表名数组,默认空,生成所有表
///
public static bool CreateIServices(SqlSugarClient sqlSugarClient, string ConnId, string[] tableNames = null)
{
try
{
Create_IServices_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.IServices", "Blog.Core.IServices", tableNames, "");
return true;
}
catch (Exception)
{
return false;
}
}
///
/// 生成 Repository 层
///
/// sqlsugar实例
/// 数据库链接ID
/// 数据库表名数组,默认空,生成所有表
///
public static bool CreateRepository(SqlSugarClient sqlSugarClient, string ConnId, string[] tableNames = null)
{
try
{
Create_Repository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.Repository", "Blog.Core.Repository", tableNames, "");
return true;
}
catch (Exception)
{
return false;
}
}
///
/// 生成 Service 层
///
/// sqlsugar实例
/// 数据库链接ID
/// 数据库表名数组,默认空,生成所有表
///
public static bool CreateServices(SqlSugarClient sqlSugarClient, string ConnId, string[] tableNames = null)
{
try
{
Create_Services_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\Blog.Core.Services", "Blog.Core.Services", tableNames, "");
return true;
}
catch (Exception)
{
return false;
}
}
#region 根据数据库表生产Model层
///
/// 功能描述:根据数据库表生产Model层
/// 作 者:Blog.Core
///
///
/// 数据库链接ID
/// 实体类存放路径
/// 命名空间
/// 生产指定的表
/// 实现接口
/// 是否序列化
private static void Create_Model_ClassFileByDBTalbe(
SqlSugarClient sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface,
bool blnSerializable = false)
{
//多库文件分离
strPath = strPath + @"\Models\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"{using}
namespace " + strNameSpace + @"
{
{ClassDescription}
[SugarTable( ""{ClassName}"", """ + ConnId + @""")]" + (blnSerializable ? "\n [Serializable]" : "") + @"
public class {ClassName}" + (string.IsNullOrEmpty(strInterface) ? "" : (" : " + strInterface)) + @"
{
public {ClassName}()
{
}
{PropertyName}
}
}")
.SettingPropertyDescriptionTemplate(p => p = string.Empty)
.SettingPropertyTemplate(p => p =
@"{SugarColumn}
public {PropertyType} {PropertyName} { get; set; }")
//.SettingConstructorTemplate(p => p = " this._{PropertyName} ={DefaultValue};")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "{0}");
}
#endregion
#region 根据数据库表生产IRepository层
///
/// 功能描述:根据数据库表生产IRepository层
/// 作 者:Blog.Core
///
///
/// 数据库链接ID
/// 实体类存放路径
/// 命名空间
/// 生产指定的表
/// 实现接口
private static void Create_IRepository_ClassFileByDBTalbe(
SqlSugarClient sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface)
{
//多库文件分离
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using Blog.Core.IRepository.Base;
using Blog.Core.Model.Models." + ConnId + @";
namespace " + strNameSpace + @"
{
///
/// I{ClassName}Repository
///
public interface I{ClassName}Repository : IBaseRepository<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "I{0}Repository");
}
#endregion
#region 根据数据库表生产IServices层
///
/// 功能描述:根据数据库表生产IServices层
/// 作 者:Blog.Core
///
///
/// 数据库链接ID
/// 实体类存放路径
/// 命名空间
/// 生产指定的表
/// 实现接口
private static void Create_IServices_ClassFileByDBTalbe(
SqlSugarClient sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface)
{
//多库文件分离
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using Blog.Core.IServices.BASE;
using Blog.Core.Model.Models." + ConnId + @";
namespace " + strNameSpace + @"
{
///
/// I{ClassName}Services
///
public interface I{ClassName}Services :IBaseServices<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "I{0}Services");
}
#endregion
#region 根据数据库表生产 Repository 层
///
/// 功能描述:根据数据库表生产 Repository 层
/// 作 者:Blog.Core
///
///
/// 数据库链接ID
/// 实体类存放路径
/// 命名空间
/// 生产指定的表
/// 实现接口
private static void Create_Repository_ClassFileByDBTalbe(
SqlSugarClient sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface)
{
//多库文件分离
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using Blog.Core.IRepository." + ConnId + @";
using Blog.Core.IRepository.UnitOfWork;
using Blog.Core.Model.Models." + ConnId + @";
using Blog.Core.Repository.Base;
namespace " + strNameSpace + @"
{
///
/// {ClassName}Repository
///
public class {ClassName}Repository : BaseRepository<{ClassName}>, I{ClassName}Repository" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
public {ClassName}Repository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "{0}Repository");
}
#endregion
#region 根据数据库表生产 Services 层
///
/// 功能描述:根据数据库表生产 Services 层
/// 作 者:Blog.Core
///
///
/// 数据库链接ID
/// 实体类存放路径
/// 命名空间
/// 生产指定的表
/// 实现接口
private static void Create_Services_ClassFileByDBTalbe(
SqlSugarClient sqlSugarClient,
string ConnId,
string strPath,
string strNameSpace,
string[] lstTableNames,
string strInterface)
{
//多库文件分离
strPath = strPath + @"\" + ConnId;
strNameSpace = strNameSpace + "." + ConnId;
var IDbFirst = sqlSugarClient.DbFirst;
if (lstTableNames != null && lstTableNames.Length > 0)
{
IDbFirst = IDbFirst.Where(lstTableNames);
}
var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute()
.SettingClassTemplate(p => p =
@"using Blog.Core.IRepository." + ConnId + @";
using Blog.Core.IServices." + ConnId + @";
using Blog.Core.Model.Models." + ConnId + @";
using Blog.Core.Services.BASE;
namespace " + strNameSpace + @"
{
public partial class {ClassName}Services : BaseServices<{ClassName}>, I{ClassName}Services" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @"
{
private readonly I{ClassName}Repository _dal;
public {ClassName}Services(I{ClassName}Repository dal)
{
this._dal = dal;
base.BaseDal = dal;
}
}
}")
.ToClassStringList(strNameSpace);
CreateFilesByClassStringList(ls, strPath, "{0}Services");
}
#endregion
#region 根据模板内容批量生成文件
///
/// 根据模板内容批量生成文件
///
/// 类文件字符串list
/// 生成路径
/// 文件名格式模板
private static void CreateFilesByClassStringList(Dictionary ls, string strPath, string fileNameTp)
{
foreach (var item in ls)
{
var fileName = $"{string.Format(fileNameTp, item.Key)}.cs";
var fileFullPath = Path.Combine(strPath, fileName);
if (!Directory.Exists(strPath))
{
Directory.CreateDirectory(strPath);
}
File.WriteAllText(fileFullPath, item.Value);
}
}
#endregion
}
}