2014-06-21 53 views

回答

1

默认情况下,当你得到一些实体(在我们的例子'用户')时,不会加载所有的导航属性。你应该使用Expand(..)。下面我举一个例子,如何来管理分配给用户,以及如何获得用户的经理导航属性(一些基础设施的细微差别省略):

public async Task<Result> AssingUserManager(string userUpn, string managerUpn) 
{ 
    try 
    { 
     var user = (AD.User)await ADClient.Users 
      .Where(x => x.UserPrincipalName == userUpn) 
      .ExecuteSingleAsync(); 

     var manager = (AD.User)await ADClient.Users 
      .Where(x => x.UserPrincipalName == managerUpn) 
      .ExecuteSingleAsync(); 

     user.Manager = manager; 

     await manager.UpdateAsync(); 
     return Result.Ok(); 
    } 
    catch (Exception ex) 
    { 
     return Result.Fail(new Error("Failed to assign manager", null, ex)); 
    } 
} 

public async Task<Result<User>> GetUserManager(string upn) 
{ 
    try 
    { 
     var user = (AD.User)await ADClient.Users 
        .Where(x => x.UserPrincipalName == upn) 
        .Expand(x => x.Manager) 
        .ExecuteSingleAsync(); 

     var manager = user.Manager as AD.User; 
     if (manager != null) 
     { 
      return Result.Ok(ConvertToModel(manager)); 
     } 

     return Result.Fail<User>(new Error("Manager not found for specified user", null)); 
    } 
    catch (Exception ex) 
    { 
     return Result.Fail<User>(new Error("Failed to get user's manager", null, ex)); 
    } 
} 

另外,还要注意的是,当我更新图表我这样做,通过调用UpdateAsync上被分配为管理员的用户,而不是管理员属性正在设置的用户(取自此source