添加导航属性

This commit is contained in:
橙子
2022-04-16 00:01:00 +08:00
parent f15d99e168
commit 88b968e826
16 changed files with 195 additions and 13 deletions

Binary file not shown.

View File

@@ -87,5 +87,17 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Yi.Framework.ApiMicroservice.Controllers.TestController.IncludeTest">
<summary>
极爽导航属性
</summary>
<returns></returns>
</member>
<member name="M:Yi.Framework.ApiMicroservice.Controllers.TestController.ContextTest">
<summary>
自由导航属性
</summary>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@@ -15,12 +15,11 @@ namespace Yi.Framework.ApiMicroservice.Controllers
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
[ApiController] [ApiController]
[Route("api/[controller]/[action]")]
public class BaseCrudController<T> : ControllerBase where T : BaseModelEntity,new() public class BaseCrudController<T> : ControllerBase where T : BaseModelEntity,new()
{ {
public readonly ILogger<T> _logger; private readonly ILogger<T> _logger;
public IBaseService<T> _baseService; private IBaseService<T> _baseService;
public IRepository<T> _repository; private IRepository<T> _repository;
public BaseCrudController(ILogger<T> logger, IBaseService<T> iBaseService) public BaseCrudController(ILogger<T> logger, IBaseService<T> iBaseService)
{ {
_logger = logger; _logger = logger;

View File

@@ -23,11 +23,13 @@ namespace Yi.Framework.ApiMicroservice.Controllers
{ {
private IStringLocalizer<LocalLanguage> _local; private IStringLocalizer<LocalLanguage> _local;
private IUserService _iUserService; private IUserService _iUserService;
private IRoleService _iRoleService;
//你可以依赖注入服务层各各接口,也可以注入其他仓储层,怎么爽怎么来! //你可以依赖注入服务层各各接口,也可以注入其他仓储层,怎么爽怎么来!
public TestController(ILogger<UserEntity> logger, IUserService iUserService, IStringLocalizer<LocalLanguage> local) public TestController(ILogger<UserEntity> logger, IRoleService iRoleService, IUserService iUserService, IStringLocalizer<LocalLanguage> local)
{ {
_local = local; _local = local;
_iUserService = iUserService; _iUserService = iUserService;
_iRoleService = iRoleService;
} }
/// <summary> /// <summary>
@@ -42,19 +44,19 @@ namespace Yi.Framework.ApiMicroservice.Controllers
//非常好使用UserService的特有方法 //非常好使用UserService的特有方法
await _iUserService.DbTest(); await _iUserService.DbTest();
//非常好依赖注入使用其他Service的特有方法(就tm一张表现在自己注入自己) //非常好依赖注入使用其他Service的特有方法
await _iUserService.DbTest(); await _iRoleService.DbTest();
//很核理,使用仓储的通用方法 //很核理,使用仓储的通用方法
await _iUserService._repository.GetListAsync(); await _iUserService._repository.GetListAsync();
//挺不错,依赖注入其他仓储(就tm一张表现在自己注入自己) //挺不错,依赖注入其他仓储
await _iUserService._repository.GetListAsync(); await _iRoleService._repository.GetListAsync();
//不建议操作,直接切换其他仓储(就tm一张表现在自己切换自己) //不建议操作,直接切换其他仓储
await _iUserService._repository.ChangeRepository<Repository<UserEntity>>().GetListAsync(); await _iUserService._repository.ChangeRepository<Repository<RoleEntity>>().GetListAsync();
//恭喜你已经毕业了!此后将有一天,接手到这个的软件的程序员将破口大骂。 //直接操作Db对象恭喜你已经毕业了!此后将有一天,接手到这个的软件的程序员将破口大骂。
await _iUserService._repository._Db.Queryable<UserEntity>().ToListAsync(); await _iUserService._repository._Db.Queryable<UserEntity>().ToListAsync();
return Result.Success().SetData(await _iUserService.DbTest()); return Result.Success().SetData(await _iUserService.DbTest());
@@ -132,6 +134,15 @@ namespace Yi.Framework.ApiMicroservice.Controllers
} }
//emmmm看来一张表已经满足不了接下来将要大更新一波 /// <summary>
/// 极爽导航属性
/// </summary>
/// <returns></returns>
[HttpGet]
//Sqlsugar精髓之一必学最新版本
public async Task<Result> IncludeTest()
{
return Result.Success().SetData(await _iUserService.GetListInRole());
}
} }
} }

View File

@@ -0,0 +1,16 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Yi.Framework.Model.Models;
using Yi.Framework.Repository;
namespace Yi.Framework.Interface
{
public partial interface IRoleService
{
/// <summary>
/// DbTest
/// </summary>
/// <returns></returns>
public Task<List<RoleEntity>> DbTest();
}
}

View File

@@ -0,0 +1,9 @@
using Yi.Framework.Model.Models;
using Yi.Framework.Repository;
namespace Yi.Framework.Interface
{
public partial interface IRoleService:IBaseService<RoleEntity>
{
}
}

View File

@@ -0,0 +1,9 @@
using Yi.Framework.Model.Models;
using Yi.Framework.Repository;
namespace Yi.Framework.Interface
{
public partial interface IUserRoleService:IBaseService<UserRoleEntity>
{
}
}

View File

@@ -30,5 +30,12 @@ namespace Yi.Framework.Interface
/// <param name="userAction"></param> /// <param name="userAction"></param>
/// <returns></returns> /// <returns></returns>
public Task<bool> Register(UserEntity userEntity, Action<UserEntity> userAction = null); public Task<bool> Register(UserEntity userEntity, Action<UserEntity> userAction = null);
/// <summary>
/// 导航属性关联角色
/// </summary>
/// <returns></returns>
public Task<List<UserEntity>> GetListInRole();
} }
} }

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
///
///</summary>
[SugarTable("Role")]
public partial class RoleEntity:BaseModelEntity
{
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="RoleName" )]
public string RoleName { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
/// <summary>
///
///</summary>
[SugarTable("UserRole")]
public partial class UserRoleEntity:BaseModelEntity
{
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="RoleId" )]
public long? RoleId { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="UserId" )]
public long? UserId { get; set; }
/// <summary>
/// 租户Id
///</summary>
[SugarColumn(ColumnName="TenantId" )]
public long? TenantId { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Yi.Framework.Model.Models
{
public partial class UserEntity:BaseModelEntity
{
/// <summary>
/// 看好啦ORM精髓导航属性
///</summary>
[Navigate(typeof(UserRoleEntity), nameof(UserRoleEntity.UserId), nameof(UserRoleEntity.RoleId))]
public List<RoleEntity> Roles { get; set; }
}
}

View File

@@ -0,0 +1,17 @@
using SqlSugar;
using System.Collections.Generic;
using System.Threading.Tasks;
using Yi.Framework.Interface;
using Yi.Framework.Model.Models;
using Yi.Framework.Repository;
namespace Yi.Framework.Service
{
public partial class RoleService
{
public async Task<List<RoleEntity>> DbTest()
{
return await _repository._Db.Queryable<RoleEntity>().ToListAsync();
}
}
}

View File

@@ -0,0 +1,14 @@
using SqlSugar;
using Yi.Framework.Interface;
using Yi.Framework.Model.Models;
using Yi.Framework.Repository;
namespace Yi.Framework.Service
{
public partial class RoleService : BaseService<RoleEntity>, IRoleService
{
public RoleService(IRepository<RoleEntity> repository) : base(repository)
{
}
}
}

View File

@@ -0,0 +1,14 @@
using SqlSugar;
using Yi.Framework.Interface;
using Yi.Framework.Model.Models;
using Yi.Framework.Repository;
namespace Yi.Framework.Service
{
public partial class UserRoleService : BaseService<UserRoleEntity>, IUserRoleService
{
public UserRoleService(IRepository<UserRoleEntity> repository) : base(repository)
{
}
}
}

View File

@@ -65,5 +65,11 @@ namespace Yi.Framework.Service
} }
return false; return false;
} }
public async Task<List<UserEntity>> GetListInRole()
{
return await _repository._Db.Queryable<UserEntity>().Includes(u => u.Roles).ToListAsync();
}
} }
} }