この回答は、Entity Framework 6 Code First アプローチの使用を前提としています (ただし、すべてのコードは以前のバージョンの EF で動作するはずです)。
Provider と ProviderUserId へのアクセスにも問題がありました。OAuth で認証されたユーザー アカウントを削除しようとしました。次のコードを使用して、データベースから実際のユーザー アカウントを削除できました。
((SimpleMembershipProvider)Membership.Provider).DeleteAccount(selectedUser); // deletes record from webpages_Membership table
((SimpleMembershipProvider)Membership.Provider).DeleteUser(selectedUser, true); // deletes record from UserProfile table
ただし、これにより webpages_OAuthMembership テーブルにエントリが残りました (削除したかったのです!)。
これを解決するために、db テーブルと同じ名前のクラスを作成しました。
public class webpages_OAuthMembership
{
[Key, Column(Order=0)]
public string Provider { get; set; }
[Key, Column(Order = 1)]
public string ProviderUserId { get; set; }
public int UserId { get; set; }
}
Key および Column データ注釈により、EF は Provider および ProviderUserId が複合キーを形成することを認識できます (SQL Server はこれをクラスター化された PK と呼んでいると思います)。とにかく、データベースを初期化する DbContext クラスで、そのクラスで DbSet を実行しました。
public DbSet<webpages_OAuthMembership> webpages_OAuthMembership { get; set; }
これにより、コードでデータベースの OAuth テーブルにアクセスできるようになりました
var db = new DbContext(); db.webpages_OAuthMembership.ToList();
// this would give you all entries in the OAuth table
あなたの場合、ProviderUserId を取得するには、次のコードを使用できます
var OAuthAccount = db.webpages_OAuthMembership.Where(u => u.UserId == userIdOfUserYouAreSearchingFor).FirstOrDefault;
// ProviderUserId would be OAuthAccount.ProviderUserId
ここで、'userIdOfUserYouAreSearchingFor' は (UserProfile テーブルからの) UserId です。最後に FirstOrDefault があることを確認してください。そうすれば、データベースにその特定の UserId のエントリがない場合、null を受け取り、それを再度確認できます。
私の場合、上記のテーブルからエントリを削除したかったのです。他の誰かがこれに出くわした場合に備えて、その情報も含めます。このコードを使用しました
var OAuthAcct = ((SimpleMembershipProvider)Membership.Provider).GetAccountsForUser(selectedUser).ToList();
var provider = OAuthAcct[0].Provider;
var providerUserId = OAuthAcct[0].ProviderUserId;
((SimpleMembershipProvider)Membership.Provider).DeleteOAuthAccount(provider, providerUserId);
webpages_OAuthMembership テーブルからエントリを削除します。
それが役立つことを願っています!