معمولا برای هر جدول یک فیلد Id از نوع int یا Guid در نظر میگیریم. ولی asp.net identity برای جدول UserRole این فیلد رو نمیزاره و primary key رو دو ستونه قرار میده (UserId,RoleId)
از لحاظ پرفورمنسی بهتره یک ستونه باشه ولی اینجا مجبوریم PK رو دو ستونه نگهش داریم چون اینجوری طراحی شده و اگر تک ستونه بشه متدهای کلاسهای Manger خود asp.net identity از کار میفته مثل userManager.AddToRoleAsync .
علاوه بر این ما در کل سیستم به یک نحو جداول رو میسازیم و به یک صورت عملیات crud رو انجام میدیم. حالا اگر بخوایم یک فرم برای ویرایش این جدول در ui بسازیم مثل باقی فرم ها بهتره Id سطر مورد نظر ارسال بشه برای update یا delete.
پس میایم ستون Id رو به کلاس UserRole (ارث بری از IdentityUserRole هم داره) اضافه میکنیم auto increment اش میکنیم (identtity:Yes) و primary key دو ستونه رو هم با fluent api براش ست میکنیم سپس Migration میزنیم. اگر ارور گرفتین دیتابیس رو حذف و دوباره Update-Database رو اجرا کنید.
اگر تایپ Id رو هم از Guid به int تبدیل کنیم پرفرمنس بهتری داره.
برای مشاهده کدهای مورد نیاز فایلهای DbContext و UserRole و UserRoleConfig به این پست stackoverflow مراجعه کنید:
https://stackoverflow.com/a/71014800/9875486
یک پروژه تمپلیت هم برای UserManagement درست کردم البته از نوع blazor wasm که کدها اونجا هم هست ، این لینکشه :
https://github.com/mammadkoma/attendance
برای نصب و راه اندازی پروژه توضیحات زیر README.md رو ببینید.