ASP.NET标识用户标识为Int错误转换失败nvarchar值

时间:2015-04-30 21:21:04

标签: c# asp.net entity-framework asp.net-identity dbcontext

我的代码工作正常,但是当我尝试将用户ID设置为Int而不是字符串时,通过添加应用程序用户和所有类。 添加迁移工作正常但在更新数据库时我收到以下错误。

  

转换nvarchar值时转换失败   ' 60b67a91-64e0-4dc7-a85c-abd9521a0b50'到数据类型int。该声明   已被终止。

以下是代码

public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole,
   CustomUserClaim>
{

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(
UserManager<ApplicationUser, int> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(
            this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }
}

public class CustomUserRole : IdentityUserRole<int> { }
public class CustomUserClaim : IdentityUserClaim<int> { }
public class CustomUserLogin : IdentityUserLogin<int> { }

public class CustomRole : IdentityRole<int, CustomUserRole>
{
    public CustomRole() { }
    public CustomRole(string name) { Name = name; }
}

public class CustomUserStore : UserStore<ApplicationUser, CustomRole, int,
    CustomUserLogin, CustomUserRole, CustomUserClaim>
{
    public CustomUserStore(ClinicContext context)
        : base(context)
    {
    }
}

public class CustomRoleStore : RoleStore<CustomRole, int, CustomUserRole>
{
    public CustomRoleStore(ClinicContext context)
        : base(context)
    {
    }
}

public class CustomUserManager : UserManager<ApplicationUser, int>
{
    public CustomUserManager(CustomUserStore store) : base(store) { }

}
public class CustomRoleManager : RoleManager<CustomRole, int>
{
    public CustomRoleManager(CustomRoleStore store) : base(store) { }
}

我的数据库上下文为:

public partial class ClinicContext : IdentityDbContext<ApplicationUser, CustomRole,
    int, CustomUserLogin, CustomUserRole, CustomUserClaim>
    {
        public ClinicContext()
            : base("name=ClinicContext")
        {
        }
}

1 个答案:

答案 0 :(得分:1)

您的现有行包含nvarchar个ID,而您的更新脚本不知道如何将GUID转换为int

如果你真的不需要这些数据,那么放弃行可能是最简单的 - 特别是如果你已经配置了数据库来生成Id。