我有一个用户实体的类。其中一个属性是用户的密码(实际上是哈希)。我把它变成了一个字符串(简化的代码):
public class User
{
public virtual int Id { get; set; }
public virtual string Password { get; set; }
}
还有一个Fluent NHibernate映射(简化代码):
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("users");
Id(x => x.Id).GeneratedBy.Sequence("users_id_seq");
Map(x => x.Password); // what do I put here???
}
}
PostgreSQL上的数据库列为bytea数据类型。上面的映射不起作用,因为属性是字符串(文本)。我该怎么办?
答案 0 :(得分:1)
您可以将Password
设为公共财产,该财产仅用于引用基础私有财产HashedPassword
。
类似的事情:
protected virtual byte[] /*or whatever the type is*/ HashedPassword {get; set;}
public virtual string Password
get
{
return (string)(HashedPassword); //or however you want to cast it to string...
}
set
//...
然后您可以告诉流利的nHib忽略您的密码属性。
答案 1 :(得分:0)
这是最终解决方案,它可以双向工作(读取和写入),我之前尝试的方法无法正常工作。希望这会对某人有所帮助。
public class User
{
private byte[] _password;
public virtual int Id { get; private set; }
public virtual string Password
{
get { return System.Text.Encoding.Unicode.GetString(_password); }
set { _password = System.Text.Encoding.Unicode.GetBytes(value); }
}
}
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("users");
Id(x => x.Id).GeneratedBy.Sequence("users_id_seq");
Map(x => x.Password)
.Access.LowerCaseField(Prefix.Underscore)
.CustomType<byte[]>();
}
}