1

我有一个用户实体类。其中一个属性是用户的密码(实际上是哈希)。我把它变成了一个字符串(简化的代码):

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数据类型。上面的映射不起作用,因为属性是字符串(文本)。我该怎么办?

4

2 回答 2

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
//...

然后,您可以告诉 fluent nHib 忽略您的 Password 属性。

于 2011-07-02T13:08:43.247 回答
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[]>();
    }
}
于 2011-07-05T14:03:37.823 回答