情况:假设我在使用 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..
}
正如 Ayende 本人解释的那样: http://ayende.com/Blog/archive/2008/07/31/Entities-dependencies-best-practices.aspx
现在查询时,使用 NHibernate IQuery 接口,我需要加密我传递给查询的参数:
query.SetString("DbEncryptedParameter",
CryptoProvider.Instance.Encrypt(UnencryptedValueObject.ToString()));
问题:是否有更好的方法来执行此查询,利用 NHibernate 对此加密类型的知识,因此在设置参数时不必执行加密?