我是使用 ASP.NET Core 和 Entity Framework 進行 c# 開發的新手,我無法確定撰寫查詢的正確位置。我讀過在控制器中撰寫它們不是一個好習慣,但我以通用方式實作了 UoW 模式和存盤庫模式,所以我能夠加入多個表的唯一地方是在 Rol 控制器中。
下面是表格方案的影像
表方案
我每張表有一個存盤庫
解決方案資源管理器
滾動控制器
[Route("api/roles")]
[ApiController]
public class RolController : ControllerBase
{
private readonly IMapper _mapper;
private readonly IConfiguration _config;
private readonly IUnitOfWork _unitOfWork;
public RolController(IUnitOfWork unitOfWork,IMapper mapper, IConfiguration config)
{
_unitOfWork = unitOfWork;
_mapper = mapper;
_config = config;
}
[HttpGet("GetrolesCompletos")]
public async Task<IActionResult> GetRolesCompletos()
{
IQueryable<Rol> rol = await _unitOfWork.Rol.GetAll();
IQueryable<PermisoEnRol> permisosenrol = await _unitOfWork.PermisosEnRol.GetAll();
IQueryable<Permiso> permiso = await _unitOfWork.Permiso.GetAll();
var query = from r in rol
join pr in permisosenrol on r.IdRol equals pr.Idrol
join p in permiso on pr.IdPermiso equals p.IdPermiso
select new
{
rol = r,
permisosenrol = pr,
permiso = p
};
var result = query.ToList();
return Ok(result);
}
}
uj5u.com熱心網友回復:
它應該像/你應該設定它那樣作業,這樣你就可以像這樣作業:
public async Task<IActionResult> GetRolesCompletos() =>
context.PermisoEnRols.Select(per =>
new {
PermisoEnRol = per,
per.Permiso,
per.Rol
}
.ToList();
而已; EF 將根據您使用相關物體per.Permiso和per.Rol在 Select 中為您執行連接。由于匿名型別的 PermisoEnRol 屬性具有在匿名型別上重復的 Permiso 和 Rol 屬性,因此它使圖有點混亂
請注意,這會將您的資料庫物體暴露給呼叫者;通常我們會有一些其他物件供前端使用并將資料庫物體映射到它
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/456792.html
