#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
Доступно.