Я пытаюсь создать UserType, который хэширует значение. Проблема, с которой я сталкиваюсь, - это получить доступ к Соле, который сидит в той же таблице.NHibernate: получить доступ к значению другого столбца в UserType
void IUserType.NullSafeSet(IDbCommand cmd, object value, int index)
{
object paramVal = DBNull.Value;
if (!String.IsNullOrEmpty((string)value))
{
paramVal = ComputeHash((string)value, saltBytes?);
}
IDataParameter parameter = (IDataParameter)cmd.Parameters[index];
parameter.Value = paramVal;
}
Я не уверен в том, как надежно доступа столбца базы данных из тех же таблиц, чтобы получить соль, которая была установлена.
я мог бы сделать что-то вроде этого, чтобы получить доступ к колонку соли:
byte[] saltValueBeingInsertedIntoDB = (IDataParameter)cmd.Parameters[1].Value;
Это только кажется настолько хрупким, чтобы получить доступ к нему с помощью индекса, так как порядок может измениться. Мне бы это понравилось, если бы я мог получить доступ к нему из имени столбца, но имя столбца (SoureColumn) никогда не заселено.
Как я могу надежно получить доступ к Соле, который существует в cmd.Parameters? Или есть лучший способ? (Я имею полный контроль над тем, чтобы изменить все необходимое, кроме версии NHibernate).
Примечание: Если я устанавливаю соль где-то в другом месте, это может иметь смысл и для хеширования значения в этом месте, а не для использования типа UserType.
NHiberate 2.1.2.4000 Fluent NHibernate 1.1.0.685
В конце концов я бы пошел с вашей запиской. Таким образом, я могу тестировать часть хеширования независимо от NHibernate. – Suhas