c# - Entity Framework 多个多对多查询

标签 c# entity-framework

我有一个简单的安全模型:

  • 用户
  • 角色
  • 路径

以及这些表之间的多对多链接,因此用户到角色,角色到路径。我正在尝试编写一个函数,以便根据用户名和路径返回一个 bool 值,该值基于用户是否有权访问该路径。我如何使用 Entity Framework 来做到这一点?我目前有:

var rolesForUser = _entities.Users
         .Include("Roles")
         .Where(u => u.Login.Equals(username))
         .Select(u => u.Roles);

if(rolesForUser.Count() == 0) return false;

var authentications = _entities.WebPaths
         .Where(p => p.Path == path)
         .WhereIn(p => p.Roles, rolesForUser);

return (authentications.Count() > 0);

它使用扩展方法 WhereIn ,但是这只能在原始动物上进行比较,所以目前还行不通。欢迎提出任何建议。

最佳答案

你或许可以用 PredicateBuilder 做到这一点.

在我的脑海中:

var predicate = PredicateBuilder.False<WebPath>();
foreach (var role in from roles in rolesForUser 
                     from r in roles.Role
                     select r)
{
  predicate = predicate.Or (p => p.roles.Any(r => r.Id == role.Id));
}

var authentications = _entities.WebPaths.AsExpandable()
         .Where(p => p.Path == path)
         .Where(predicate);
return (authentications.Count() > 0);

关于c# - Entity Framework 多个多对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999785/

相关文章:

c# - 我需要为 Nest Search 创建类型吗?

c# - Visual Studio 在打开项目时卡住

C# Entity Framework : Keyword not supported: 'port'

c# - OrderBy Lambda 的通用列表

c# - System.Linq.Enumerable.Max 的 Mono 之间的模糊调用

c# - 2D 碰撞检测不起作用

entity-framework - 运行 azure 函数和 Entity Framework 时找不到连接字符串

c# - 我可以让 2 个不同的 Entity Framework 上下文共享一个 Sql Server Compact 数据库吗?

c# - 单个类项目中的可访问性级别

c# - 忽略 Entity Framework 4.1 Code First 中的类属性