سلام.
یک سایت طراحی کردم که در آن جدول Roles رو شخصی سازی کردم تا در قسمتی از سایت از آن استفاده کنم و در sql server جدول AspNetRoles که مربوط به آن است را به صورت دستی مقداردهی کردم اما نمیدانم چرا موقع اجرا مقدار null برای جدول نقش ها برگردانده میشود.
کدها:
شخصی سازی جدول نقش ها
public class ApplicationRole : IdentityRole
{
public string RoleLevel { get; set; }
public string Description { get; set; }
}
ایجاد تغییرات در ApplicationDbContext
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<ApplicationRole> ApplicationRoles { get; set; }
}
اکشن خواندن داده های جدول نقش ها:
public class IndexModel : PageModel
{
private readonly RoleManager<ApplicationRole> _roleManager;
public IndexModel(RoleManager<ApplicationRole> roleManager)
{
_roleManager = roleManager;
}
public ActionResult OnGet()
{
var list= _roleManager.Roles.ToList();
return Page();
}
}
با دستورات
Add-migration EditRoles
update-database
تغییرات را در دیتابیس ایجاد کردم.
یک breakpoint در خط 12 اکشن onGet (کد return Page) قرار دادم تا با فراخوانی اکشن onGet صفحه index اجرا در آن نقطه متوقف شود و بتوان مقدار متغیر list را بررسی کنم که مقدار آن برابر null است.
میخواستم ببینم مشکل کجاست که مقدار null را برای list بر میگرداند با این که من چندین رکورد را در جدول AspNetRoles ثبت کردم؟
فکر می کنم دستوراتتتون برای دریافت نقش ها مشکل داشته باشه. چون شما میخواید همه نقش های جدول رو بخونید بهتره از خود context استفاده کنید :
private readonly ApplicationDbContext _context;
public HomeController()
{
_context = context;
}
public IActionResult Index()
{
var roleList = _context.ApplicationRoles.ToList();
}
البته این نکته رو هم بگم شما در کلاس ApplicationDbContext از IdentityDbContext استفاده کردید. این کلاس خودش شامل 7 جدول Identity هست. بنابراین دیگه نیازی نیست دوباره یک DbSet به نام ApplicationRoles تعریف کنید.
سلام.اتفاقاً این رو من تست کردم اما بازم مقدار list برابر null بود.
private readonly ApplicationDbContext _db;
public IndexModel(ApplicationDbContext db)
{
_db = db;
}
public ActionResult OnGet()
{
var list= _db.Roles.ToList();
return Page();
}
البته با کد زیر می توان نقش ها را دریافت کرد اما فقط فیلدهای IdentityRole رو شامل می دهد و فیلد هایی که به وسیله کلاس ApplicationRole تعریف کردم شامل نمی شود
public class IndexModel : PageModel
{
private readonly RoleManager<IdentityRole> _roleManager;
public IndexModel(RoleManager<IdentityRole> roleManager)
{
_roleManager = roleManager;
}
public ActionResult OnGet()
{
var list= _roleManager.Roles.ToList();
return Page();
}
}
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
87
- پاسخ :
1
|
تاریخ :
1400/07/17
- ساعت :
10:39:00 PM
- بازدید :
2335
- پاسخ :
0
|
تاریخ :
1403/09/05
- ساعت :
06:32:00 PM
- بازدید :
70
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
149
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1067
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
474
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1378
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4824
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
238
- پاسخ :
1
|
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
87
- پاسخ :
1
|
تاریخ :
1400/07/17
- ساعت :
10:39:00 PM
- بازدید :
2335
- پاسخ :
0
|
تاریخ :
1403/09/05
- ساعت :
06:32:00 PM
- بازدید :
70
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2037
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
149
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1067
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
474
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
948
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1378
- پاسخ :
1
|