2016-10-10 2 views
0

私はMVCアプリケーションで作業しており、役割を作成するフォームがあります。フォームからのデータはポスト作成アクションメソッドに正しく送信されます。このメソッドのシグネチャは、次のとおりID:新しく作成されたロールが見つからないのはなぜですか?

[HttpPost] 
public async Task<ActionResult> Create([Bind(Include = "Name")] AppRole appRole, string [] PrivsChecked) 

基本的に、これは、ユーザがフォーム上で選択として、役割を作成し、役割のために選択された特権を付けることを意味します。問題は、ロールに特権を割り当てる場合、新しく作成されたロールが見つからないということです。部分的なコードは以下の通りです:

public async Task<ActionResult> Create([Bind(Include = "Name")] AppRole appRole, string [] PrivsChecked) 
     { 
     if (PrivsChecked == null || PrivsChecked.Length == 0) 
     { 
      return Json(new { status = "error", message = "At least one privilege must be selected." }); 
      } 
      else 
      { 
       if (ModelState.IsValid) 
       { 
       IdentityResult result 
           = await RoleManager.CreateAsync(new AppRole(appRole.Name)); 
       if (result.Succeeded) 
          { 
           var approleToUpdate = db.IdentityRoles.Where(i => i.Id == appRole.Id).FirstOrDefault(); 
. 
. 
. 

appRoleToUpdateは、そのコードは、ロールの作成に成功したという意味に達しているが、少なくとも、nullに割り当てられています。次のようにコントローラでグローバル変数として宣言private AppIdentityDbContext db = new AppIdentityDbContext();dbコンテキストは、次のとおりです

using IdentityDevelopment.Models; 
using Microsoft.AspNet.Identity; 

namespace IdentityDevelopment.Infrastructure 
{ 
    public class AppIdentityDbContext : IdentityDbContext<AppUser> 
    { 

     public AppIdentityDbContext() : base("IdentityDb") { } 

     static AppIdentityDbContext() 
     { 
      Database.SetInitializer<AppIdentityDbContext>(new IdentityDbInit()); 
     } 

     public static AppIdentityDbContext Create() 
     { 
      return new AppIdentityDbContext(); 
     } 


     public System.Data.Entity.DbSet<IdentityDevelopment.Models.AppRole> IdentityRoles { get; set; } 

     public System.Data.Entity.DbSet<IdentityDevelopment.Models.AppPrivilege> AppPrivileges { get; set; } 
    } 


    public class IdentityDbInit : NullDatabaseInitializer<AppIdentityDbContext> 
    { 
    } 

} 

奇妙なことは非常に類似した符号は、同様の編集方法に存在することであり、その場合に、appRoleToUpdateが見つかります。新しく作成されたロールを同じメソッド内で見つけるには、何ができますか?これにはメソッドの非同期性がありますか?

ありがとうございます。

答えて

2

あなたは新しい名前で新しい役割を作成しましたが、実際にそのIDはまだわかりません。あなたの役割を返すはずの名前を確認してみてください(それはあなたが一意であることを確認してください)。

var approleToUpdate = db.IdentityRoles.Where(i => i.Name == appRole.Name).FirstOrDefault(); 
+0

ありがとうございました。 – ITWorker

関連する問題