IdentityDbContext 中的 Identity 实体框架将所有 Identity 类更改为自定义类

问题描述 投票:0回答:1

我的旧环境就像

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”。没有隐式引用转换

c# entity-framework asp.net-identity dbcontext
1个回答
0
投票

我认为您遇到错误 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

© www.soinside.com 2019 - 2024. All rights reserved.