2013-04-09 55 views
0

我用來創建一個自定義角色提供程序。asp.net MVC3 LINQ表達式

我的項目 - 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; } 
} 

回答

0

你不能做出與單查詢不同的上下文相關的查詢。嘗試改變你的roleIds linq代碼,以避免它的延遲加載,將其轉換爲數組:

var roleIds = (from ur in usersInRoleRepository.UsersInRoles 
       where ur.UserId == userId 
       select ur.RoleId).ToArray(); 
+0

謝謝。問題現在解決得很好。 – user2214027 2013-04-09 07:58:33

+0

@ user2214027然後將答案標記爲正確:) – Alex 2013-04-09 08:01:45