NHibernate:访问 UserType 中另一列的值
NHibernate: Access another column's value in a UserType
我正在尝试制作一个散列值的 UserType。我遇到的问题是获取位于同一 table.
中的 Salt
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;
}
我不确定如何可靠地访问相同table的数据库列以获取设置的盐。
我可以像这样访问盐列:
byte[] saltValueBeingInsertedIntoDB = (IDataParameter)cmd.Parameters[1].Value;
通过索引访问它似乎很脆弱,因为顺序可能会改变。如果我可以通过列名访问它,我会很高兴,但列名 (SoureColumn) 从未被填充。
如何可靠地访问 cmd.Parameters 中存在的 Salt?或者,还有更好的方法? (我可以完全控制更改所需的任何内容,NHibernate 版本除外)。
注意:如果我在其他地方设置 salt,我也可以在那个地方散列值,而不是使用 UserType。
NHiberate 2.1.2.4000
流利的 NHibernate 1.1.0.685
为了解决我的问题,我选择不使用 UserType。
相反,我在需要它的对象上创建了我的加密服务的静态实例,然后使用助手 属性 来 get/set 加密值。这对我很有用。
public class Consumer
{
static Consumer()
{
CipherConsumerSsnService = new CipherConsumerSsnService();
}
public static ICipherConsumerSsnService CipherConsumerSsnService { get; set; }
public virtual long ID { get; private set; }
public virtual byte[] SSN { get; protected set; }
public virtual string GetDecryptedSsnOrSetSsnValueAndEncryptIt
{
get
{
return SSN != null ? CipherConsumerSsnService.Decrypt(SSN) : null;
}
set
{
SSN = value != null ? CipherConsumerSsnService.Encrypt(value) : null;
}
}
}
请注意,此示例未使用盐,但您应该使用!
我正在尝试制作一个散列值的 UserType。我遇到的问题是获取位于同一 table.
中的 Salt 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;
}
我不确定如何可靠地访问相同table的数据库列以获取设置的盐。
我可以像这样访问盐列:
byte[] saltValueBeingInsertedIntoDB = (IDataParameter)cmd.Parameters[1].Value;
通过索引访问它似乎很脆弱,因为顺序可能会改变。如果我可以通过列名访问它,我会很高兴,但列名 (SoureColumn) 从未被填充。
如何可靠地访问 cmd.Parameters 中存在的 Salt?或者,还有更好的方法? (我可以完全控制更改所需的任何内容,NHibernate 版本除外)。
注意:如果我在其他地方设置 salt,我也可以在那个地方散列值,而不是使用 UserType。
NHiberate 2.1.2.4000 流利的 NHibernate 1.1.0.685
为了解决我的问题,我选择不使用 UserType。
相反,我在需要它的对象上创建了我的加密服务的静态实例,然后使用助手 属性 来 get/set 加密值。这对我很有用。
public class Consumer
{
static Consumer()
{
CipherConsumerSsnService = new CipherConsumerSsnService();
}
public static ICipherConsumerSsnService CipherConsumerSsnService { get; set; }
public virtual long ID { get; private set; }
public virtual byte[] SSN { get; protected set; }
public virtual string GetDecryptedSsnOrSetSsnValueAndEncryptIt
{
get
{
return SSN != null ? CipherConsumerSsnService.Decrypt(SSN) : null;
}
set
{
SSN = value != null ? CipherConsumerSsnService.Encrypt(value) : null;
}
}
}
请注意,此示例未使用盐,但您应该使用!