2014-07-18 15 views
6

Kimlik 2.0.0 biz tip IdentityUserRoles ile ApplicationUser Roller navigasyon özelliği vardır ve biz Kullanıcılara aynı tip IdentityUserRoles buradaApplicationUser ve ApplicationRole navigasyon özellikleri

o

olduğu ile IdentityRole navigasyon özelliği vardır i context.Users boyunca yineleme zaman
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; } 
    } 
} 

öylesine i standardını birçok çoğa haritalama betw yapmak için bir yol yoktur, sadece almak

RolNo edebilirsiniz een ApplicationUser ve ApplicationRole? benim durum için bir çözüm buldum bu soru üzerine bazı işten sonra

:

ben bu

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

GÜNCELLEME böyle bir şey yaptığını yapabilmek istiyor. belki de onun kadar zarif değil, fakat benim durumumda IdentityUserRole'u ek gezinme özellikleriyle genişletmek zorundayım.

Genişletilmiş IdentityUserRole ApplicationUserRole'a sahip olmak ve tüm çözümlerde uygun değişiklikler yapmak. burada benim yeni IdentityUserRole geçerli:

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

ve şimdi ben böyle belli rolünde tüm kullanıcıları alabilirsiniz: AplicationUserRole o çözüm çalışılır böylece ek navigasyon özelliklerini saklamak için gerekli olan

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

benim durumumda

benim için. ama hala

+0

'IdentityUserRole' olan ara nesnesidir: Bir kullanıcı için Role nesneler topluluğu almak için, (böylece% 100 çalışmayabilir kafamın üst kapalı bu yazarak) RoleManager sınıfını kullanmalıdır zaten çoktan çoğa ilişkiyi sağlamak. Yani 'IdentityUser' <->' IdentityUserRole' <-> 'IdentityRole ' – DavidG

+0

Güncellemeniz benim için çalışmaz. Yeni bir Göç oluşturmaya çalışırken İstisnalar alıyorum. – Thomas

cevap

2

IdentityUser.Roles() size sadece RoleId ve UserId özelliklerini ihtiva IdentityUserRole nesneler topluluğu verir IdentityUser ve IdentityRole arasındaki temiz birçok-çok ilişkisi nasıl oluşturulacağını merak.

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

evet. bunu kullanmak zorundayım. ama sorum, standarttan çoka eşlemenin erişilebilirliği ile ilgili. neyse, cevabın için teşekkürler – taburetkin