2015-03-17 6 views
11

में भूमिका में है या नहीं, मुझे उपयोगकर्ताओं और भूमिकाओं के साथ अपना डेटाबेस बीजिंग करने में कोई समस्या है।जांच रहा है कि कोई उपयोगकर्ता एएसपीएनटी एमवीसी पहचान

उपयोगकर्ता और भूमिका दोनों बनाई गई हैं (त्रुटि को फेंकने के बाद मैं उन्हें डेटाबेस में देख सकता हूं)।

हालांकि, जब मैं यह जांचने की कोशिश करता हूं कि उपयोगकर्ता भूमिका में है या नहीं, तो मुझे अपवाद मिलता है।

मेरे कोड है:

public class tbInitializer<T> : DropCreateDatabaseAlways<tbContext> 
    { 
    protected override void Seed(tbContext context) 
    { 
     ApplicationDbContext userscontext = new ApplicationDbContext(); 
     var userStore = new UserStore<ApplicationUser>(userscontext); 
     var userManager = new UserManager<ApplicationUser>(userStore); 

     var roleStore = new RoleStore<IdentityRole>(userscontext); 
     var roleManager = new RoleManager<IdentityRole>(roleStore); 


     if(!userscontext.Users.Any(x=> x.UserName=="marktest")) 
     { 
      var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" }; 
      userManager.Create(user, "Pa$$W0rD!"); 
     } 

     if (!roleManager.RoleExists("Admin")) 
     { 
      roleManager.Create(new IdentityRole("Admin")); 
     } 

     if(!userManager.IsInRole("marktest","Admin")) 
     { 
      userManager.AddToRole("marktest","Admin"); 
     } 

हालांकि, लाइन पर:

if(!userManager.IsInRole("marktest","Admin"))

एक अपवाद त्रुटि के साथ फेंक दिया जाता है: UserId not found.

उपयोगकर्ता और भूमिका दोनों कर रहे हैं डेटाबेस में जब मैं अपवाद के बाद जांचता हूं:

Shows User Added to DB

Shows Role Added to DB

किसी को भी मैं गलत क्या कर रहा देख सकते हैं?

किसी भी मदद के लिए धन्यवाद,

मार्क

+0

क्या आपने 'SaveChanges()' 'if (! UserManager.IsInRole (" marktest "," Admin ") से पहले 'कोशिश की है)? – Bruniasty

+0

हाय - हाँ, मैंने 'संदर्भ जोड़ा। सेव चेंज();' - बस उस पंक्ति से पहले, लेकिन अभी भी एक ही त्रुटि के साथ अपवाद फेंकता है। धन्यवाद, मार्क – Mark

+0

क्या "marktest" उपयोगकर्ता डेटाबेस में सहेजा गया है? – Bruniasty

उत्तर

23

मैं समाधान में पता चला, किसी और मामले किसी को भी इस समस्या हो रही है। - नहीं एक उपयोगकर्ता नाम स्ट्रिंग -

"IsInRole" एक User.Id उम्मीद कर रही है तो मैं करने के लिए बदल:

  if (!userManager.IsInRole(user.Id, "Admin")) 
      { 
       userManager.AddToRole(user.Id, "Admin"); 
      } 

तो काम कर कोड हो जाता है:

ApplicationDbContext userscontext = new ApplicationDbContext(); 
    var userStore = new UserStore<ApplicationUser>(userscontext); 
    var userManager = new UserManager<ApplicationUser>(userStore); 

    var roleStore = new RoleStore<IdentityRole>(userscontext); 
    var roleManager = new RoleManager<IdentityRole>(roleStore); 

    // Create Role 
    if (!roleManager.RoleExists("Admin")) 
    { 
     roleManager.Create(new IdentityRole("Admin")); 
    } 

    if(!userscontext.Users.Any(x=> x.UserName=="marktest")) 
    { 
     // Create User 
     var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" }; 
     userManager.Create(user, "Pa$$W0rD!"); 

     // Add User To Role 
     if (!userManager.IsInRole(user.Id, "Admin")) 
      { 
       userManager.AddToRole(user.Id, "Admin"); 
      } 


    } 

मुझे आशा है कि मदद करता है,

मार्क

+0

मेरा कोड वही दिखता है फिर भी मुझे अभी भी UserId एक ही स्थान पर नहीं मिला –

4

जीवन में सरलतम चीज़;

bool isAdmin= User.IsInRole("admin") 
+0

किसी कारण से, यह मेरे लिए काम नहीं करता है! मैं जेडब्ल्यूटी प्रमाणीकरण के साथ नेट कोर का उपयोग कर रहा हूं। – Ciwan

+0

@if (Roles.IsUserInRole (Model.UserName, "Administrator") का उपयोग करने का प्रयास करें) यदि यह काम करता है –

संबंधित मुद्दे