1

实体模型

所以,这就是我的模型.. 又好又复杂。

我正在寻找通过用户 ID 获取区域。如果我在 SQL 中执行此操作,我会一直执行一系列连接到用户表。您将如何在 LINQ 查询语法或方法链接中执行此操作?

反过来,我可以很直接地做到这一点,但是我必须做很多额外的工作才能使结果图变平,而且还需要拉回中间的所有实体。

如果我可以选择包括 AreasPermissions 和 Permissions,那将是 gravy .. 但在这一点上,我不介意额外的查询来获取这些。

我浮动的另一个选项是使用函数导入到 sproc 并将其映射到 Area .. 但是当我开始需要包含其他实体时,它会使该选项不那么优雅。我也试图避免使用 sprocs只是为了使用 sprocs,因为它总是与人们一起滑坡..“将 sproc 用于一件事”往往会变成“不要将 EF(表访问)用于任何事情”。

var userByID = new Func<User, bool>(x => x.UserId.Equals(userID, StringComparison.InvariantCultureIgnoreCase));
var user = this._context.Users
    .Include("TeamsUsers.Team.TeamsRoles.Role.RolesAreasPermissions.AreaPermission.Area")
    .Include("TeamsUsers.Team.TeamsRoles.Role.RolesAreasPermissions.AreaPermission.Permission")
    .Single(userByID);
4

1 回答 1

4

我无法对此进行测试,但我认为它应该可以工作:

var result = 
    from user in _context.Users
    where user.Id == userId
    from teamUser in user.TeamUsers
    from teamRole in teamUser.Team.TeamRoles
    from roleAreaPermission in teamRole.Role.RoleAreaPermissions
    select roleAreaPermission.AreaPermission.Area;
于 2012-09-18T23:34:31.997 回答