2016-11-17 18 views
1

私は現在のユーザーに新しい役割を与えてくれる単純なメソッドを作成しようとしています(現在のユーザーは1つしかありませんので、単純な方法で取得できます)クエリ)UserManagerでロールを追加する

public ActionResult Index() 
{ 
    using (var db = new MyDbContext()) 
    { 
     var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db)); 
     var id = User.Identity.GetUserId(); 
     var role = db.AspNetRoles.First(); 
     manager.AddToRole(id, role.Name); 
    } 

    return View(); 
} 

私はこのエラーを取得しています:The entity type ApplicationUser is not part of the model for the current context.manager.AddToRole(id, role.Name);に。私はASP.NETの初心者ですので、インフラストラクチャについてはあまりよく分かりませんが、このコードはユーザ登録に関する質問で(ここではスタック上に)何度も言及されていました。

ところで、私の目標として、データベース初回の移行システムでプロジェクトにロールシステムを実装する必要がありますが、このmanager.AddToRole(id, role.Name);コードは自分のDBにレコードを追加しますか?

以下
+0

「HRMEntities」とは何か、それは何から継承していますか? – DavidG

+0

ApplicationUserテーブルの名前を何らかのカスタムに変更してしまいましたか?また、DavidGが暗示しているように、HRMEntities DBコンテキストがIdentityDbContext を継承していることを確認してください。 – Overhed

+0

Sry、それは私の接続文字列の名前です固定していない。これを 'MyDbContext'に変更しました。 – rainbowShiningUnicorn

答えて

0

役割に新しく作成したユーザーを追加することを示している、スタブ(不完全)である:

  DbContext context = db; 
      IdentityResult ir; 
      var um = new UserManager<ApplicationUser>(
       new UserStore<ApplicationUser>(context)); 

      ApplicationUser au = new ApplicationUser(); 
      au = db.Users.FirstOrDefault(u => u.UserName == uname); 

      if (au == null) 
      { 
       // add the user 
       var user = new ApplicationUser() 
       { 
        UserName = TrustNoOne("name", uname), 
        Email = TrustNoOne("email", uemail), 
        ProperUserName = TrustNoOne("propername", upropname) 
       }; 

       // create a password for the user 
       ir = um.Create(user, upass); 

       // assign the user to a role 
       if (User.IsInRole(urole) != true) 
       { 
        ir = um.AddToRole(user.Id, urole); 
       } 
      } 

注意してください、のuname、uemail、upropname、upass、およびuroleはどこメソッドに渡されるパラメータですこのコードは存続します。また、TrustNoOneビット(私が使用するもの)を無視することもできます。

関連する問題