c# - ASP.NET 成员(member)资格提供程序无法在 LINQ 查询中返回用户角色

标签 c# asp.net linq asp.net-membership

我正在尝试使用 LINQ 获取所有用户及其角色的列表。 该应用程序基于 Membership Provider ver.1,我想从下面的配置行可以看到:

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="2" applicationName="/" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <add connectionStringName="DefaultConnection" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </providers>
</roleManager>

我的 LINQ 查询如下:

var users = (from u in db.Users
            join m in db.Memberships on u.UserId equals m.UserId
            select new 
            {
               m.Email,
               u.UserName,
               u.UserId,
               m.IsLockedOut,
               Roles = Roles.GetRolesForUser(u.UserName) //doesn't work   
             }).ToList();

问题是 Roles = Roles.GetRolesForUser(u.UserName) 不能作为类 Roles 没有任何方法 GetRolesForUser()

Roles available methods

我什至无法使用 UsersInRoles 进行查询,因为该表没有映射,如下所示。 Entity Data Model

最佳答案

我以前就见过这种情况,我知道当您想使用 LINQ 获取数据并使用另一个 LINQ 时,它不起作用。

解决这个问题的最好方法是,您必须在查询之前获取所有Roles(当您的数据保存在内存中时,您可以轻松获取这些数据) 或将该方法设置为 Awaitable,如下所示:

有内存:

var allRoles = _roleMaganer.GetAllRoles();

var users = (from u in db.Users
        join m in db.Memberships on u.UserId equals m.UserId
        select new 
        {
           m.Email,
           u.UserName,
           u.UserId,
           m.IsLockedOut,
           Roles = allRoles.FirstOrDefault(x=>x.UserName == u.UserName)    
         }).ToList();

可等待:

var users = (from u in db.Users
        join m in db.Memberships on u.UserId equals m.UserId
        select new 
        {
           m.Email,
           u.UserName,
           u.UserId,
           m.IsLockedOut,
           Roles = await Roles.GetRolesForUser(u.UserName)   
         }).ToList();

When the GetRolesForUser was Async or MultyTask when your base Query want to execute, and you don't used of await key, exception occured, because the EF can't make other a connection in one Query

关于c# - ASP.NET 成员(member)资格提供程序无法在 LINQ 查询中返回用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464117/

相关文章:

c# - 从俄语(西里尔文)解码 Http 响应内容

asp.net - 手动更新表单例份验证票 :

c# - 在 Linq 中不符合条件

javascript - 如何使用 JavaScript 查找和修改 asp.net 控件?

c# - 不使用 LINQ 的原因

c# - 列表中的 LINQ 查询列表

C# 代码不能 "see"我的 C++ dll 中的方法

c# - 使用 InvokeRequired 与 control.InvokeRequired

c# - TcpClient 套接字 - 每个套接字地址异常的唯一用法

c# - 使用多个asp创建Bootstrap-Datepicker :Repeater TextBoxes