मेरे पास तीन वर्ग हैं: Role, Permission और RolePermission(भूमिका अनुमति कई रिश्ते के लिए कई में तीसरी तालिका है)

public class Role : Entity
{
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<RolePermission> RolePermissions { get; set; }
}

public class Permission : Entity
{
    public string Name { get; set; }
    public virtual ICollection<RolePermission> RolePermissions { get; set; }
}

public class RolePermission : Entity
{
    public int RoleId { get; set; }
    public int PermissionId { get; set; }
    public Permission Permission { get; set; }
    public Role Role { get; set; }
}

तब मैंने रिश्ते को कॉन्फ़िगर करने के लिए fluentAPI का उपयोग किया:

Role के लिए:

HasMany(role => role.RolePermissions)
            .WithRequired(rolePermission => rolePermission.Role)
            .HasForeignKey(rolePermission => rolePermission.RoleId);

Permission के लिए:

HasMany(permission => permission.RolePermissions)
            .WithRequired(rolePermission => rolePermission.Permission)
            .HasForeignKey(rolePermission => rolePermission.PermissionId);

RolePermission के लिए:

HasRequired(rolePermission => rolePermission.Permission)
            .WithMany(permission => permission.RolePermissions)
            .HasForeignKey(rolePermission => rolePermission.PermissionId);

HasRequired(rolePermission => rolePermission.Role)
            .WithMany(role => role.RolePermissions)
            .HasForeignKey(rolePermission => rolePermission.RoleId);

समस्या यह है कि केवल Role वस्तु भर जाती है।

enter image description here

1
Mihai Alexandru-Ionut 10 सितंबर 2018, 12:38

2 जवाब

सबसे बढ़िया उत्तर

इस प्रश्न में कोड संबंध स्थापित करने से संबंधित है। इस प्रश्न में रिपोर्ट की गई समस्या संबंधित डेटा से संबंधित है जो स्वचालित रूप से लोड नहीं हो रही है। ये दो अलग-अलग चीजें हैं जिनका एक दूसरे से बहुत कम लेना-देना है।
क्या आपने कहीं एक शामिल करना याद किया? क्या आपने रोल एनएवी प्रोप (और इसलिए आलसी लोड) को एक्सेस किया है, लेकिन परमिशन नेवी प्रोप को नहीं? मैं उस कोड को देखना चाहता हूं जहां से आप क्वेरी लॉन्च करते हैं जहां से आप इस ऑब्जेक्ट का निरीक्षण करते हैं (आपके स्क्रीनशॉट के अनुसार)

आपने अनुरोधित कोड के साथ उत्तर दिया:

var user = _userRepository
                .FirstOrDefaultAsync(us => us.Email == email); 

var userPermissions = 
           user.UserRoles
               .First()
               .Role
               .RolePermissions
               .Select(rp => rp.Permission)
               .ToList();

अगर आप अपनी क्वेरी में Include() स्टेटमेंट डालते हैं, तो आप देखें कि Permission वास्तव में सही ढंग से प्राप्त किया जाएगा।

मुझे पूरा यकीन नहीं है कि आप किस वस्तु का निरीक्षण कर रहे हैं। स्क्रीनशॉट मुझे बताता है कि आप एक RolePermission देख रहे हैं, लेकिन पोस्ट किया गया कोड बताता है कि आप Permission ऑब्जेक्ट की एक सूची प्राप्त करते हैं।

भले ही, ऐसा लगता है कि आपने इसे Include का उपयोग करके पहले ही ठीक कर लिया है:

मिहाई अलेक्जेंड्रू-आयनट @Flater, हां, मुझे शामिल का उपयोग करना है और समस्या हल हो गई है। यह समाधान है, इसलिए इसे स्वीकार करने के लिए कृपया इसे उत्तर के रूप में पोस्ट करें।

1
Flater 10 सितंबर 2018, 13:30

Id प्रॉपर्टी Role और Permission दोनों टेबल के लिए मौजूद नहीं है। जब आप RoleId प्रॉपर्टी को RolePermission टेबल में कहते हैं, तो EF Role टेबल में आईडी प्रॉपर्टी ढूंढता है।

अपनी भूमिका और अनुमति तालिका को इस तरह अपडेट करें और कोशिश करें:

public class Role : Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<RolePermission> RolePermissions { get; set; }
}

public class Permission : Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<RolePermission> RolePermissions { get; set; }
}
0
Kailash Ravuri 10 सितंबर 2018, 13:10