Sql server Microsoft.EntityFrameworkCore.Database.Command[20102]-字节[]数据有问题

Sql server Microsoft.EntityFrameworkCore.Database.Command[20102]-字节[]数据有问题,sql-server,entity-framework,asp.net-core,Sql Server,Entity Framework,Asp.net Core,EF核心数据库存在问题: 执行DbCommand失败(28毫秒)[参数=[],命令类型='Text',命令超时='30'] 声明@var0 sysname 选择@var0=[d].[name] 从[sys].[default_constraints][d] [d].[parent\u column\u id]=[c].[column\u id]和[d].[parent\u object\u id]=[c].[object\u id]上的内部联接[sys].[columns][c] 其中([d].

EF核心数据库存在问题:

执行DbCommand失败(28毫秒)[参数=[],命令类型='Text',命令超时='30']

声明@var0 sysname
选择@var0=[d].[name]
从[sys].[default_constraints][d]
[d].[parent\u column\u id]=[c].[column\u id]和[d].[parent\u object\u id]=[c].[object\u id]上的内部联接[sys].[columns][c]
其中([d].[parent_object_id]=object_id(N'[User]')和[c].[name]=N'PasswordSalt')
如果@var0不是NULL EXEC(N'ALTER TABLE[User]DROP CONSTRAINT['+@var0+'];')
ALTER TABLE[User]ALTER COLUMN[PasswordSalt]varbinary(16)NULL

若我在用户模型上有字符串密码,一切正常,但若我想将其更改为byte[],我会看到上面的错误

public class User
{
    [Key]
    public Guid UserId { get; set; }
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int RoleId { get; set; } //admin czy nie
    public string PhoneNo { get; set; }
    public string Login { get; set; }
    [MaxLength(16)]
    public byte[] PasswordHash { get; set; }
    [MaxLength(16)]
    public byte[] PasswordSalt { get; set; }
}
我试着在这个方法中转换成字节

public Models.User.User Authenticate(string email, string password)
{
        if (string.IsNullOrEmpty(email) || (string.IsNullOrEmpty(password)))
        {
            return null;
        }

        throw new NotImplementedException();

        var user = _dbContext.Set<Models.User.User>().SingleOrDefault(x => x.Email == email);

        // check if customer with email exist
        if (user == null)
        {
            return null;
        }

        byte[] array = Encoding.ASCII.GetBytes(user.PasswordHash);
        byte[] array2 = Encoding.ASCII.GetBytes(user.PasswordSalt);

        // check if password is correct
        if (!VerifyPasswordHash(password, user.PasswordHash, user.PasswordSalt))
        {
            return null;
        }

        return user;
}
public Models.User.User身份验证(字符串电子邮件、字符串密码)
{
if(string.IsNullOrEmpty(电子邮件)| |(string.IsNullOrEmpty(密码)))
{
返回null;
}
抛出新的NotImplementedException();
var user=_dbContext.Set().SingleOrDefault(x=>x.Email==Email);
//检查是否存在发送电子邮件的客户
if(user==null)
{
返回null;
}
byte[]数组=Encoding.ASCII.GetBytes(user.PasswordHash);
byte[]array2=Encoding.ASCII.GetBytes(user.PasswordSalt);
//检查密码是否正确
if(!VerifyPasswordHash(password,user.PasswordHash,user.PasswordSalt))
{
返回null;
}
返回用户;
}

但它不工作,我需要
byte[]
数据。您能帮忙吗?

您有一个抛出异常,它会导致您的错误

您可以看到代码的这个图像


如果您不删除此行,您的代码将引发异常

不是这样,我调试程序,并且在迁移函数私有静态异步任务迁移(IAApplicationBuilder app)期间失败{使用var serviceScope=app.ApplicationServices.GetService().CreateScope();var context=serviceScope.ServiceProvider.GetRequiredService();wait context.Database.MigrateAsync();}发生此一个或多个错误。(不允许从数据类型nvarchar(max)隐式转换为varbinary。请使用CONVERT函数运行此查询。)数据库表定义和迁移定义如何?你应该在这里给我写你的代码。你能告诉我们什么时候,哪行代码会显示这个错误吗?根据您的代码,我尝试创建示例,似乎我们可以通过字节数组存储密码,因此,我不确定上述代码的哪一行会导致此问题。