デフォルトでは、何らかのエンティティ (この場合は「ユーザー」) を取得するときに、すべてのナビゲーション プロパティが読み込まれるわけではありません。Expand(..) を使用する必要があります。以下に、Manager を User に割り当てる方法と、User の Manager ナビゲーション プロパティを取得する方法の例を示します (一部のインフラストラクチャのニュアンスは省略されています)。
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));
}
}
また、グラフを更新するときは、 Manager プロパティが設定されているユーザーではなく、マネージャーとして割り当てられているユーザーで UpdateAsync を呼び出して更新することに注意してください (このソースから取得)