Compare commits

..

9 Commits

Author SHA1 Message Date
橙子
1c9e993194 添加业务表 2022-04-24 23:09:34 +08:00
chenchun
dc3a465f09 Update README.md 2022-04-24 17:11:32 +08:00
chenchun
6d008efd54 修改配置文件路径 2022-04-24 17:09:43 +08:00
chenchun
6aa970c375 基类模型修改为接口 2022-04-24 16:44:16 +08:00
chenchun
1ecd01204b 回滚合并 2022-04-24 16:03:08 +08:00
chenchun
33bd8d1cd1 回滚合并 2022-04-24 16:01:09 +08:00
chenchun
31d2c3c98e 修改实体 2022-04-24 16:00:35 +08:00
橙子
b082ec19aa Merge branch 'sqlsugar' of https://gitee.com/ccnetcore/Yi into sqlsugar 2022-04-23 01:09:33 +08:00
橙子
9ccb496069 Update README.md 2022-04-23 01:09:31 +08:00
31 changed files with 449 additions and 72 deletions

View File

@@ -20,7 +20,7 @@ Yi框架-一套与SqlSugar一样爽的.Net6低代码开源框架。
适合.Net6学习、Sqlsugar学习 、项目二次开发。
集大成者,终究轮子
Yi框架最新版本标签`v1.0.3`
Yi框架最新版本标签`v1.0.4`
项目与Sqlsugar同步更新但这作者老杰哥代码天天爆肝到凌晨两点我们也尽量会跟上他的脚步。更新频繁所以可watching持续关注。
@@ -132,11 +132,13 @@ WebFirst开发所有代码生成器已经配置完成无需任何操作数
****
### 目录结构:
![图片](https://s1.ax1x.com/2022/04/09/LCTleH.png)
![image](https://s1.ax1x.com/2022/04/09/LCTleH.png)
![image](https://s1.ax1x.com/2022/04/24/L4qlSs.png)
![image](https://s1.ax1x.com/2022/04/24/L4q1ln.png)
我们大致依照DDD领域驱动设计分层
什么感觉太复杂了用户只需关注Api、Service其他都是轮子啊
分层如此清晰!什么?感觉太复杂了用户只需关注Api、Service其他都是轮子啊
~~- BackGround后台进程目前可以无视等待更新~~
- Client客户端测试、客户端

Binary file not shown.

View File

@@ -4,6 +4,11 @@
<name>Yi.Framework.ApiMicroservice</name>
</assembly>
<members>
<member name="T:Yi.Framework.ApiMicroservice.Controllers.AccountController">
<summary>
账户控制器
</summary>
</member>
<member name="T:Yi.Framework.ApiMicroservice.Controllers.BaseCrudController`1">
<summary>
Json To Sql 类比模式,通用模型
@@ -63,6 +68,11 @@
</summary>
<returns></returns>
</member>
<member name="T:Yi.Framework.ApiMicroservice.Controllers.TestController">
<summary>
测试控制器
</summary>
</member>
<member name="M:Yi.Framework.ApiMicroservice.Controllers.TestController.DbTest">
<summary>
仓储上下文对象测试

View File

@@ -17,6 +17,9 @@ using Yi.Framework.WebCore.AuthorizationPolicy;
namespace Yi.Framework.ApiMicroservice.Controllers
{
/// <summary>
/// 账户控制器
/// </summary>
[ApiController]
[Route("api/[controller]/[action]")]
public class AccountController :ControllerBase

View File

@@ -15,7 +15,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers
/// </summary>
/// <typeparam name="T"></typeparam>
[ApiController]
public class BaseCrudController<T> : ControllerBase where T : BaseModelEntity,new()
public class BaseCrudController<T> : ControllerBase where T : class, IBaseModelEntity,new()
{
private readonly ILogger<T> _logger;
private IBaseService<T> _baseService;

View File

@@ -0,0 +1,28 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Yi.Framework.Common.Models;
using Yi.Framework.Interface;
using Yi.Framework.Model.Models;
using Yi.Framework.Repository;
using Yi.Framework.WebCore;
using Yi.Framework.WebCore.AttributeExtend;
using Yi.Framework.WebCore.AuthorizationPolicy;
namespace Yi.Framework.ApiMicroservice.Controllers
{
[ApiController]
[Route("api/[controller]/[action]")]
public class MenuController : BaseCrudController<MenuEntity>
{
private IMenuService _iMenuService;
public MenuController(ILogger<MenuEntity> logger, IMenuService iMenuService) : base(logger, iMenuService)
{
_iMenuService = iMenuService;
}
}
}

View File

@@ -19,6 +19,9 @@ using Yi.Framework.WebCore.AuthorizationPolicy;
namespace Yi.Framework.ApiMicroservice.Controllers
{
/// <summary>
/// 测试控制器
/// </summary>
[ApiController]
[Route("api/[controller]/[action]")]
public class TestController : ControllerBase

View File

@@ -130,7 +130,7 @@ ServiceLocator.Instance = app.Services;
#region
//错误抓取反馈注入
#endregion
//app.UseErrorHandlingService();
app.UseErrorHandlingService();
#region
//静态文件注入
#endregion

View File

@@ -61,6 +61,7 @@ namespace Yi.Framework.Common.Helper
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
request.CookieContainer = cookie;
Stream myRequestStream = request.GetRequestStream();
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
myStreamWriter.Write(postDataStr);

View File

@@ -8,7 +8,7 @@ using Yi.Framework.Repository;
namespace Yi.Framework.Interface
{
public interface IBaseService<T> where T:BaseModelEntity,new()
public interface IBaseService<T> where T: class, IBaseModelEntity,new()
{
public IRepository<T> _repository { get; set; }
}

View File

@@ -3,7 +3,7 @@ using Yi.Framework.Repository;
namespace Yi.Framework.Interface
{
public partial interface IUserRoleService:IBaseService<UserRoleEntity>
public partial interface IMenuService:IBaseService<MenuEntity>
{
}
}

View File

@@ -9,9 +9,10 @@ namespace Yi.Framework.Model.Models
///</summary>
[SplitTable(SplitType.Year)]
[SugarTable("SplitLog_{year}{month}{day}")]
public partial class LogEntity
public partial class LogEntity
{
[SplitField] //分表字段 在插入的时候会根据这个字段插入哪个表,在更新删除的时候用这个字段找出相关表
public DateTime? LogCreateTime { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
/// 菜单表
///</summary>
public partial class MenuEntity
{
[SqlSugar.SugarColumn(IsIgnore = true)]
public List<MenuEntity> Childs { get; set; }
}
}

View File

@@ -1,48 +0,0 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Model.Models
{
public abstract class BaseModelEntity
{
public BaseModelEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
/// 1
///</summary>
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 创建者
/// </summary>
[SugarColumn(ColumnName = "CreateUser")]
public long? CreateUser { get; set; }
/// <summary>
/// 修改者
///</summary>
[SugarColumn(ColumnName = "ModifyUser")]
public long? ModifyUser { get; set; }
/// <summary>
/// 创建时间
///</summary>
[SugarColumn(ColumnName = "CreateTime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 修改时间
///</summary>
[SugarColumn(ColumnName = "ModifyTime")]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 是否删除
///</summary>
[SugarColumn(ColumnName = "IsDeleted")]
public bool? IsDeleted { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.Model.Models
{
public interface IBaseModelEntity
{
public long Id { get; set; }
public long? CreateUser { get; set; }
public long? ModifyUser { get; set; }
public DateTime? CreateTime { get; set; }
public DateTime? ModifyTime { get; set; }
public bool? IsDeleted { get; set; }
}
}

View File

@@ -7,15 +7,51 @@ namespace Yi.Framework.Model.Models
/// <summary>
/// 日志表
///</summary>
public partial class LogEntity:BaseModelEntity
public partial class LogEntity:IBaseModelEntity
{
public LogEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
/// 1
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
/// 创建者
///</summary>
[SugarColumn(ColumnName="CreateUser" )]
public long? CreateUser { get; set; }
/// <summary>
/// 创建时间
///</summary>
[SugarColumn(ColumnName="CreateTime" )]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 修改者
///</summary>
[SugarColumn(ColumnName="ModifyUser" )]
public long? ModifyUser { get; set; }
/// <summary>
/// 修改时间
///</summary>
[SugarColumn(ColumnName="ModifyTime" )]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 是否删除
///</summary>
[SugarColumn(ColumnName="IsDeleted" )]
public bool? IsDeleted { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
/// <summary>
/// 日志信
///
///</summary>
[SugarColumn(ColumnName="Message" )]
public string Message { get; set; }

View File

@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
/// 菜单表
///</summary>
[SugarTable("Menu")]
public partial class MenuEntity:IBaseModelEntity
{
public MenuEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
/// 1
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="MenuName" )]
public string MenuName { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="MenuType" )]
public int? MenuType { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="MenuCode" )]
public string PermissionCode { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="ParentId" )]
public long? ParentId { get; set; }
/// <summary>
/// 创建者
///</summary>
[SugarColumn(ColumnName="CreateUser" )]
public long? CreateUser { get; set; }
/// <summary>
/// 创建时间
///</summary>
[SugarColumn(ColumnName="CreateTime" )]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 修改者
///</summary>
[SugarColumn(ColumnName="ModifyUser" )]
public long? ModifyUser { get; set; }
/// <summary>
/// 修改时间
///</summary>
[SugarColumn(ColumnName="ModifyTime" )]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 是否删除
///</summary>
[SugarColumn(ColumnName="IsDeleted" )]
public bool? IsDeleted { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
}
}

View File

@@ -5,20 +5,55 @@ using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
///
/// 角色表
///</summary>
[SugarTable("Role")]
public partial class RoleEntity:BaseModelEntity
public partial class RoleEntity:IBaseModelEntity
{
public RoleEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
/// 1
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="RoleName" )]
public string RoleName { get; set; }
/// <summary>
/// 创建者
///</summary>
[SugarColumn(ColumnName="CreateUser" )]
public long? CreateUser { get; set; }
/// <summary>
/// 创建时间
///</summary>
[SugarColumn(ColumnName="CreateTime" )]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 修改时间
///</summary>
[SugarColumn(ColumnName="ModifyTime" )]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 是否删除
///</summary>
[SugarColumn(ColumnName="IsDeleted" )]
public bool? IsDeleted { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
/// <summary>
/// 修改者
///</summary>
[SugarColumn(ColumnName="ModifyUser" )]
public long? ModifyUser { get; set; }
}
}

View File

@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
/// 角色菜单关系表
///</summary>
[SugarTable("RoleMenu")]
public partial class RoleMenuEntity:IBaseModelEntity
{
public RoleMenuEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
/// 1
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="RoleId" )]
public long? RoleId { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="MenuId" )]
public long? MenuId { get; set; }
/// <summary>
/// 创建者
///</summary>
[SugarColumn(ColumnName="CreateUser" )]
public long? CreateUser { get; set; }
/// <summary>
/// 创建时间
///</summary>
[SugarColumn(ColumnName="CreateTime" )]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 修改者
///</summary>
[SugarColumn(ColumnName="ModifyUser" )]
public long? ModifyUser { get; set; }
/// <summary>
/// 修改时间
///</summary>
[SugarColumn(ColumnName="ModifyTime" )]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 是否删除
///</summary>
[SugarColumn(ColumnName="IsDeleted" )]
public bool? IsDeleted { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
}
}

View File

@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
/// 租户表
///</summary>
[SugarTable("Tenant")]
public partial class TenantEntity:IBaseModelEntity
{
public TenantEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
/// 1
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="TenantName" )]
public string TenantName { get; set; }
/// <summary>
/// 创建者
///</summary>
[SugarColumn(ColumnName="CreateUser" )]
public long? CreateUser { get; set; }
/// <summary>
/// 创建时间
///</summary>
[SugarColumn(ColumnName="CreateTime" )]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 修改者
///</summary>
[SugarColumn(ColumnName="ModifyUser" )]
public long? ModifyUser { get; set; }
/// <summary>
/// 修改时间
///</summary>
[SugarColumn(ColumnName="ModifyTime" )]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 是否删除
///</summary>
[SugarColumn(ColumnName="IsDeleted" )]
public bool? IsDeleted { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
}
}

View File

@@ -5,11 +5,21 @@ using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
///
/// 用户表
///</summary>
[SugarTable("User")]
public partial class UserEntity:BaseModelEntity
public partial class UserEntity:IBaseModelEntity
{
public UserEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
///
///</summary>
@@ -22,6 +32,31 @@ namespace Yi.Framework.Model.Models
public int? Age { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="CreateUser" )]
public long? CreateUser { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="CreateTime" )]
public DateTime? CreateTime { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="ModifyUser" )]
public long? ModifyUser { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="ModifyTime" )]
public DateTime? ModifyTime { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="IsDeleted" )]
public bool? IsDeleted { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }

View File

@@ -5,11 +5,21 @@ using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
///
/// 用户角色关系表
///</summary>
[SugarTable("UserRole")]
public partial class UserRoleEntity:BaseModelEntity
public partial class UserRoleEntity:IBaseModelEntity
{
public UserRoleEntity()
{
this.IsDeleted = false;
this.CreateTime = DateTime.Now;
}
/// <summary>
/// 1
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true )]
public long Id { get; set; }
/// <summary>
///
///</summary>
@@ -21,9 +31,34 @@ namespace Yi.Framework.Model.Models
[SugarColumn(ColumnName="UserId" )]
public long? UserId { get; set; }
/// <summary>
/// 创建者
///</summary>
[SugarColumn(ColumnName="CreateUser" )]
public long? CreateUser { get; set; }
/// <summary>
/// 创建时间
///</summary>
[SugarColumn(ColumnName="CreateTime" )]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 修改时间
///</summary>
[SugarColumn(ColumnName="ModifyTime" )]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 是否删除
///</summary>
[SugarColumn(ColumnName="IsDeleted" )]
public bool? IsDeleted { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
/// <summary>
/// 修改者
///</summary>
[SugarColumn(ColumnName="ModifyUser" )]
public long? ModifyUser { get; set; }
}
}

View File

@@ -4,7 +4,7 @@ using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
public partial class UserEntity:BaseModelEntity
public partial class UserEntity
{
/// <summary>
/// 看好啦ORM精髓导航属性

View File

@@ -1,9 +1,10 @@
using SqlSugar;
using Yi.Framework.Common.Models;
using Yi.Framework.Model.Models;
namespace Yi.Framework.Repository
{
public class DataContext<T> : SimpleClient<T> where T : class, new()
public class DataContext<T> : SimpleClient<T> where T : class, IBaseModelEntity, new()
{
public DataContext(ISqlSugarClient context) : base(context)
{

View File

@@ -11,7 +11,7 @@ using Yi.Framework.Model.Query;
namespace Yi.Framework.Repository
{
public interface IRepository<T> : ISimpleClient<T> where T : BaseModelEntity,new()
public interface IRepository<T> : ISimpleClient<T> where T : class, IBaseModelEntity, new()
{
public ISqlSugarClient _Db { get; set; }
public Task<bool> UseTranAsync(Func<Task> func);

View File

@@ -12,7 +12,7 @@ namespace Yi.Framework.Repository
/// 仓储模式
/// </summary>
/// <typeparam name="T"></typeparam>
public class Repository<T> : DataContext<T>, IRepository<T> where T : BaseModelEntity,new()
public class Repository<T> : DataContext<T>, IRepository<T> where T : class, IBaseModelEntity, new()
{
public ISqlSugarClient _Db { get; set; }
/// <summary>

View File

@@ -9,7 +9,7 @@ using Yi.Framework.Repository;
namespace Yi.Framework.Service
{
public class BaseService<T>:IBaseService<T> where T:BaseModelEntity,new()
public class BaseService<T>:IBaseService<T> where T:class, IBaseModelEntity,new()
{
public IRepository<T> _repository { get; set; }
public BaseService(IRepository<T> iRepository)

View File

@@ -5,9 +5,9 @@ using Yi.Framework.Repository;
namespace Yi.Framework.Service
{
public partial class UserRoleService : BaseService<UserRoleEntity>, IUserRoleService
public partial class MenuService : BaseService<MenuEntity>, IMenuService
{
public UserRoleService(IRepository<UserRoleEntity> repository) : base(repository)
public MenuService(IRepository<MenuEntity> repository) : base(repository)
{
}
}

View File

@@ -13,7 +13,7 @@ namespace Yi.Framework.WebCore.BuilderExtend
{
if (JsonFile==null)
{
string[] myJsonFile = new string[] { "appsettings.json", "configuration.json" };
string[] myJsonFile = new string[] { "appsettings.json", "Config/configuration.json" };
foreach (var item in myJsonFile)
{
builder.AddJsonFile(item, optional: true, reloadOnChange: false);