我的旧环境就像
public class MYDbContext : IdentityDbContext<IdentityUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
{
}
但我需要这些类中的一些自定义属性将它们更改为
public class MYDbContext : IdentityDbContext<CustomUser, CustomRole, string, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
}
public class CustomUser : IdentityUser
{
public virtual Person Person { get; set; }
}
public class CustomRole : IdentityRole
{
public int Type { get; set; }
}
public class AppUserRole : IdentityUserRole
{
public int Type { get; set; }
}
以及
CustomUserLogin
、CustomUserClaim
与其他相同,没有任何额外的属性。
问题是当我尝试添加新角色或用户时,我收到此异常:
System.Data.Entity.Validation.DbEntityValidationException:“一个或多个实体的验证失败。请参阅“实体验证错误”
我该如何修复它?
我尝试将密钥类型更改为 Guid,但它不起作用,而且 我尝试仅将
UserRole
类更改为 IdentityUserRole
,但随后出现新错误 CS0311 :
不能用作泛型类型或方法“IdentityDbContext
”中的类型参数“TUser”。没有隐式引用转换
我认为您遇到错误 CS0311 是因为您没有向其他人定义您的用户角色类,我的意思是:
public class CustomUser : IdentityUser<string, YourCustomUserLogin, YourCustomUserRole, YourCustomUserClaim>
{
}
public class AppUserRole : <string, YourCustomUserRole>
{
}
当你这样做时,错误“没有隐式引用转换” 应该消失。 就我而言,当我按照我所说的方式定义它时,您继承的类(IdentityRole)更改为通用类,看看这两张图片: 或者在此链接中查看 Microsoft 课程 身份角色 IdentityRole 通用 IdentityRole 在构造函数中生成 Id。 这不是通用构造函数(IdentityRole) 所以你的解决方案之一是,创建构造函数来生成 Id 喜欢:
//
// Summary:
// Constructor
public IdentityRole()
{
base.Id = Guid.NewGuid().ToString();
}
//
// Summary:
// Constructor
//
// Parameters:
// roleName:
public IdentityRole(string roleName)
: this()
{
base.Name = roleName;
}
或以某种方式生成您的 CustomClass ID