2016-11-14 7 views
2

データベースから生成するときに、EDMXデザイナーにないAspNetUserRolesに関していくつか質問をしました。ただしModelBrowserではこのテーブルが表示されないので、ロール認可を使用できます。データベースから生成するときにEDMXにないAspNetUserRoles

私は私の役割クラスで

public override string[] GetRolesForUser(string username) 
    { 
     DTE = new DatabaseTestingEntities(); 
     string userID = DTE.AspNetUsers.Where(w => w.Email == username).Select(s => s.Id).FirstOrDefault(); 
     string roleID = DTE.AspNetUsers.Include("AspNetRoles").Where(s => s.Id == userID).FirstOrDefault().ToString();//.AspNetUserRoles.Where(w => w.UserId == userID).Select(s => s.RoleId).FirstOrDefault(); 
     string roleName = DTE.AspNetRoles.Where(w => w.Id == roleID).Select(s => s.Name).FirstOrDefault(); 
     string[] results = { roleName }; 
     return results; 
    } 

をこの方法を打つときの結果は常にnullとして戻ってくる。..

それはこのよう代わりに

public override string[] GetRolesForUser(string username) 
    { 
     DTE = new DatabaseTestingEntities(); 
     string userID = DTE.AspNetUsers.Where(w => w.Email == username).Select(s => s.Id).FirstOrDefault(); 
     string roleID = DTE.AspNetUserRoles.Where(w => w.UserId == userID).Select(s => s.RoleId).FirstOrDefault(); 
     string roleName = DTE.AspNetRoles.Where(w => w.Id == roleID).Select(s => s.Name).FirstOrDefault(); 
     string[] results = { roleName }; 
     return results; 
    } 

しかし、そのようになっているはずですがデータベースからEFを生成するときに、AspNetUserRolesがEDMXデザイナーにないため、エラーがスローされます。

このテーブルを表示するにはどうしたらよいですか?

私はEDMXを更新しようとしましたが、どちらも動作しません。

答えて

1

私はちょうどこの質問を多かれ少なかれ... "モデルのAspNetUserRolesテーブルはどこですか?"

私の理解では、AspNetUserRolesテーブルが作成され、2つの外部キー、1つはAspNetUsersテーブルに、もう1つはAspNetRolesテーブルに、もう1つはId値で構成されています。ユーザーに役割を割り当てると、AspNetUserRolesテーブルに行が追加され、AspNetUsersテーブルの "ナビゲーションプロパティ"と呼ばれるものが表示されます。あなたのedmxを見て、AspNetUsersテーブルを見つけて、下部に "AspNetRoles"というナビゲーションプロパティが表示されます。このコレクションは、AspNetUserオブジェクトのコードで利用できます。元のポスターの私はリストを返し、それに働くだろうについて

AspNetUser selectedUser = dbContext.AspNetUsers.FirstOrDefault(u => u.UserName == "foo"); 

if (selectedUser == null) return; 

List<AspNetRole> selectedUsersRoles = selectedUser.AspNetRoles.ToList(); 

:ユーザーとして

は多くの役割に属することができ、このナビゲーションプロパティリストにこのような何かを割り当てることができますコレクションです...

public override List<AspNetRoles> GetRolesForUser(string username) 
{ 
    DTE = new DatabaseTestEntities(); 
    AspNetUser selectedUser = DTE.AspNetUsers.FirstOrDefault(u => u.UserName == username); 
    if (selectedUser == null) return null; //User not found - return null 

    return List<AspNetRole> selectedUsersRoles = selectedUser.AspNetRoles.ToList(); 
} 

これは基本的に、AspNetUserRolesテーブルを明示的に「必要」しないことを意味します。あなたは上記のようにユーザーの役割を扱うことができるはずです。推奨されているかどうかはわかりませんが、AspNetUserRolesテーブルに直接挿入しません。ユーザーオブジェクトにロールを追加し、UserRolesテーブルを自動的に更新するだけです。

関連する問題