2014-07-18 5 views
6

पहचान 2.0.0 में हम प्रकार IdentityUserRoles साथ ApplicationUser में भूमिकाओं नेविगेशन संपत्ति है और हम उपयोगकर्ता है एक ही प्रकार IdentityUserRolesApplicationUser और ApplicationRole पहचान 2.0.0 में नेविगेशन गुण

यहाँ यह

है साथ IdentityRole में नेविगेशन संपत्ति
namespace Microsoft.AspNet.Identity.EntityFramework 
{ 
    // Summary: 
    //  EntityType that represents a user belonging to a role 
    // 
    // Type parameters: 
    // TKey: 
    public class IdentityUserRole<TKey> 
    { 
     public IdentityUserRole(); 

     // Summary: 
     //  RoleId for the role 
     public virtual TKey RoleId { get; set; } 
     // 
     // Summary: 
     //  UserId for the user that is in the role 
     public virtual TKey UserId { get; set; } 
    } 
} 

हां, जब मैं context.Users के माध्यम से पुनरावृति मैं केवल प्राप्त कर सकते हैं भूमिका-आईडी

वहाँ standart कई-से-अनेक मानचित्रण betw बनाने के लिए एक रास्ता है ईन ApplicationUser और ApplicationRole?

इस प्रश्न पर कुछ काम करने के बाद मैं अपने मामले के लिए एक समाधान मिल गया है:

मैं इस

foreach (var user in ApplicationDbContextInstance.Users) 
{ 
    List<ApplicationRole> UserRoles = user.Roles.ToList(); 
    /* 
    some logic ... 
    */ 
} 

अद्यतन की तरह कुछ कर रही सक्षम होना चाहते हैं। शायद यह इतना सुरुचिपूर्ण नहीं हो सकता है, लेकिन मेरे मामले में मुझे अतिरिक्त नेविगेशन गुणों के साथ IdentityUserRole का विस्तार करना है

मैंने पहचान यूज़ररोल को ApplicationUserRole में बढ़ा दिया है और सभी समाधानों में उचित परिवर्तन किए हैं। यहाँ मेरी नई IdentityUserRole है:

public class ApplicationUserRole : IdentityUserRole<string> 
{ 
    public virtual ApplicationUser User { get; set; } 
    public virtual ApplicationRole Role { get; set; } 
    public virtual ICollection<GeoSectorForUser> GeoSectors { get; set; } 
} 

और अब मैं इस तरह कुछ भूमिका में सभी उपयोगकर्ताओं के प्राप्त कर सकते हैं:

foreach(ApplicationRole role in db.Roles){ 
    List<ApplicationUser> users = role.Users.Select(s => s.User).ToList(); 
} 

मेरे मामले में AplicationUserRole अतिरिक्त नेविगेशन गुण भंडारण ताकि समाधान काम किया है के लिए आवश्यक है मेरे लिए। लेकिन मैं अभी भी

+0

'IdentityUserRole' मध्यवर्ती वस्तु है पहले से ही कई से अधिक रिश्तों को प्रदान कर रहा है। तो 'पहचान यूज़र' <-> 'पहचान यूज़ररोल <-> 'पहचानता' – DavidG

+0

आपका अपडेट मेरे लिए काम नहीं करता है। नया माइग्रेशन बनाने की कोशिश करते समय मुझे अपवाद मिलते हैं। – Thomas

उत्तर

2

IdentityUser.Roles() आप IdentityUserRole वस्तुओं जो केवल RoleId और UserId प्रॉपर्टी हो का एक संग्रह देता IdentityUser और IdentityRole के बीच स्वच्छ कई-से-अनेक संबंध बनाने का तरीका सोच रहा। एक उपयोगकर्ता के लिए Role वस्तुओं का संग्रह के लिए, आप (मेरे सिर के ऊपर से इस टाइपिंग तो 100% काम नहीं कर सकता) RoleManager वर्ग का उपयोग करना चाहिए:

var roleManager = new RoleManager(); 

foreach (var user in ApplicationDbContextInstance.Users) 
{ 
    List<IdentityUserRole> UserRoles = user.Roles.ToList(); 

    foreach(var userRole in UserRoles) 
    { 
     var role = roleManager.FindbyId(userRole.RoleId); 
    } 

} 
+1

हां। इस तरह मुझे इसका इस्तेमाल करना है। लेकिन मेरा सवाल स्टैंड-अप कई मैपिंग की स्थिरता के बारे में है। वैसे भी, उत्तर के लिए धन्यवाद – taburetkin

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