Ситуация : предположим, у меня есть столбец на объекте, который зашифрован в базе данных с использованием IUserType:
public class EncryptedStringUserType : IUserType
{
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
object r = rs[names[0]];
if (r == DBNull.Value)
return null;
return CryptoProvider.Instance.Decrypt((string) r);
}
public void NullSafeSet(IDbCommand cmd, object value, int index)
{
object paramVal = DBNull.Value;
if (value != null)
paramVal = CryptoProvider.Instance.Encrypt((string) value);
IDataParameter parameter = (IDataParameter)cmd.Parameters[index];
parameter.Value = paramVal;
}
// Other IUserType members as usual..
}
Как объяснил сам Айенде в:
http://ayende.com/Blog/archive/2008/07/31/Entities-dependencies-best-practices.aspx
Теперь при запросе, используя интерфейс NHibernate IQuery, мне нужно зашифровать параметр, который я передаю в Запрос:
query.SetString("DbEncryptedParameter",
CryptoProvider.Instance.Encrypt(UnencryptedValueObject.ToString()));
Вопрос : Есть ли лучший способ выполнить этот запрос, используя знания NHibernate об этом зашифрованном типе, поэтому шифрование не нужно выполнять при установке параметра?