私はFacebookにログインしており、ユーザーがDBにない場合は、ログイン後に追加しますが、すでに存在する場合は何もしないでください。
私の質問は、どのように対処すればよいですか?
- ユーザーを追加する前に、ユーザーが存在するかどうかを確認するDBへのクエリをもう1つ作成します。
- WCF に UpdateException でキャッチさせ、クライアントにスローします。
- 他のオプション?
私のコードは今:
private async void OnUserInfoChanged(object sender, UserInfoChangedEventArgs e)
{
DbClient client = new DbClient(); //wcf service
if (loginButton.CurrentSession != null)
{
localSettings.Values["facebookId"] = loginButton.CurrentSession.FacebookId;
localSettings.Values["UserName"] = loginButton.CurrentUser.Name;
if (!(await client.IsUserExistsAsync(loginButton.CurrentSession.FacebookId)))
{
try
{
await client.AddUserAsync(new User() { FacebookId = loginButton.CurrentSession.FacebookId, UserName = loginButton.CurrentUser.Name });
}
catch (FaultException<ValidationFault> validationFault)
{
Messages.ShowMessage(string.Format("{0}. Details:\n{1}",
validationFault.Detail.Issue, validationFault.Detail.Details),
"Validation problem");
}
catch (Exception ex)
{
Messages.ShowMessage(ex.Message);
}
}
this.Frame.Navigate(typeof(MainPage));
}
}
そしてWCF:
public User AddUser(User user)
{
Validate<User, User.UserMetadata>(user); //Throws fault exception if not valid.
try
{
IUserRepository _user = new UserRepository();
return _user.Add(user);
}
catch (UpdateException ex)
{
throw new FaultException(ex.Message);
}
catch (Exception ex)
{
throw new FaultException(ex.Message);
}
}