1

ユーザーエンティティのクラスがあります。プロパティの 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
//...

その後、Password プロパティを無視するように流暢な nHib に指示できます。

于 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 に答える