Ошибка приведения строки LINQ при возврате массива байтов

#c# #.net

#c# #.net

Вопрос:

Я пытаюсь сохранить хэши и соли в базе данных с помощью entity framework. Но когда я пытаюсь вызвать этот код, чтобы вернуть одну из солей.

 var salt = (from u in db.Users
            join p in db.Passwords on u.Name equals p.UserName
            where u.Name == username
            select p.Salt).First();
  

Я получаю это исключение:
Система.InvalidCastException: «Невозможно привести объект типа «System.Строка ‘ для ввода’ System.Байт[]’.’

Мой объект пароля выглядит следующим образом:

     class Password
    {
        [Key]
        public string UserName { get; set; }
        public byte[] Hash { get; set; }
        public byte[] Salt { get; set; }
        public User User{ get; set;}
    }
  

Комментарии:

1. Каковы фактические типы данных в вашей базе данных для столбцов?

2. Каково определение Hash и Salt в таблице паролей?

3. @jeroenh они являются nvarchar

4. Тогда это ваша ошибка. Почему вы определяете их как byte[] в коде? LINQ не может волшебным образом преобразовать строку в байт []

5. @jeroenh allright спасибо

Ответ №1:

Столбцы вашей таблицы, скорее всего, являются varchar или чем-то подобным, а не двоичными / переменными типами данных — или любым другим термином, который ваш сервер базы данных использует для хранения двоичных данных.

Если вы используете ядро EF, см. раздел преобразователи значений. StringToBytesConverter Доступно.