Скрытие промежуточной таблицы для прикладного уровня - PullRequest
2 голосов
/ 05 марта 2020

Я использую Entity Framework 2.2.

У меня очень базовая c настройка: User, UserRole, Role.

В идеале, я бы хотел для выполнения операций, подобных этим: User.Roles.Where(...). Но я не могу. Я должен загрязнить логи приложения c деталями структуры данных, поэтому я должен сделать что-то вроде этого: User.UserRoles.Where(x => x.Role...).

Есть ли способ сделать sh это?

Я попытался определить выражение для поиска пользователей с определенной c ролью:

public static Expression<Func<User, bool>> HasRole(string role)
{
    return user => user.UserRoles.Any(x => x.Role.Name == role);
}

И назвать это так:

var admins = await _context.Users
    .Where(User.HasRole("Admin"))
    .ToListAsync();

Так что я не Мне не нужно знать о таблице UserRole.

Я знаю, что есть открытая проблема на github, но я думал, какие обходные пути мы могли бы использовать сейчас?

Я видел другой подход к inte rnet:

public IEnumerable<Role> Roles => this.userRoles.Select(x => x.Role);

Было бы идеально, если бы он мог как-то автоматически переводиться в Expression, но мне нужно включить UserRoles, прежде чем я смогу использовать user.Roles, что в принципе не решает мою проблему.

...