我有 4 個表的資料庫模式。租戶可以有很多用戶,用戶可以有很多租戶。用戶可以在租戶中擁有多個角色。

使用 EF Core,我需要通過tenant_id 獲取所有用戶。用戶 DTO 需要包含角色串列。到目前為止,我想到了這樣的事情:
var users = dbContext.UserTenantsRoles
.Where(u => u.TenantId == tenantId)
.Select(u => new GetUserDto
{
Id = u.User.Id,
Email = u.User.Email,
CreatedAt = u.User.CreatedAt,
Role = u.Role.RoleName.ToString()
});
DTO:
public class GetUserDto
{
public Guid Id { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
public string Role { get; set; }
}
楷模:
[Index(nameof(Email), IsUnique = true)]
public class User
{
public Guid Id { get; set; }
public string Email { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? ModifiedAt { get; set; }
public List<UserTenantRole> UserTenantsRoles { get; set; }
[Index(nameof(Name), IsUnique = true)]
public class Tenant
{
public Guid Id { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? ModifiedAt { get; set; }
public DateTime? DeletedAt { get; set; }
public string Name { get; set; }
public List<UserTenantRole> UserTenantsRoles { get; set; }
}
[Index(nameof(RoleName), IsUnique = true)]
public class Role
{
public Guid Id { get; set; }
public RoleName RoleName { get; set; }
public List<UserTenantRole> UserTenantsRoles { get; set; }
}
public enum RoleName
{
User,
Admin
}
public class UserTenantRole
{
public Guid TenantId { get; set; }
public Tenant Tenant { get; set; }
public Guid UserId { get; set; }
public User User { get; set; }
public Guid RoleId { get; set; }
public Role Role { get; set; }
}
但我希望這個 DTO 的角色串列和用戶 ID 在用戶串列中不重復。這可能在 1 個查詢中還是我應該遍歷這個用戶串列并構建新串列?
uj5u.com熱心網友回復:
嘗試以下查詢:
var users = dbContext.Users
.Where(u => u.UserTenantsRoles.Any(utr => utr.TenantId == tenantId))
.Select(u => new GetUserDto
{
Id = u.Id,
Email = u.Email,
CreatedAt = u.CreatedAt,
Role = u.UserTenantsRoles
.Where(utr => utr.TenantId == tenantId)
.Select(utr => utr.Role.Name)
.ToList()
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/524195.html
標籤:。网实体框架核心
