0

我曾经创建一个自定义角色提供者。

我的项目 - asp.net MVC3,实体框架 4

GetRolesForUser 方法存在问题。

自定义 RoleProvider - GetRolesForUser 方法

    // The user to return a list of roles for.
    public override string[] GetRolesForUser(string userAccount)
    {
        var userId = userRepository.GetUser(userAccount).UserId;

        var roleIds = from ur in usersInRoleRepository.UsersInRoles
                    where ur.UserId == userId
                    select ur.RoleId;

        var roleNames = from r in roleRepository.Roles
                        where roleIds.Contains(r.RoleId)
                        select r.RoleName;


        if (roleNames != null)
        {
            **return roleNames.ToArray();  // here Error**
        }
        else
        {
            return new string[0];
        }
    }

错误消息:指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。

我不知道这段代码是否有问题。

请帮忙。

用户实体

public class User
{
    public Guid UserId { get; set; }
    public string UserAccount { get; set; }
    public string Password { get; set; }
    public string UserEmail { get; set; }
    public DateTime JoinDate { get; set; }
    public DateTime LoginDate { get; set; }
}

角色实体

public class Role
{
    public Guid RoleId { get; set; }
    public string RoleName { get; set; }
    public DateTime CreateDate { get; set; }
}

UsersInRole 实体

public class UsersInRole
{
    public Guid UserId { get; set; }
    public Guid RoleId { get; set; }
    public DateTime SetDate { get; set; }
}
4

1 回答 1

0

您不能在单个查询中进行与不同上下文相关联的查询。尝试通过将其转换为数组来更改您的 roleIds linq 代码以避免延迟加载:

var roleIds = (from ur in usersInRoleRepository.UsersInRoles
              where ur.UserId == userId
              select ur.RoleId).ToArray();
于 2013-04-09T07:36:51.543 回答