1

私はユーザーエンティティ用のクラスを持っています。プロパティの1つはユーザーのパスワード(実際にはハッシュ)です。私はそれの文字列(合理コード)製:文字列プロパティをデータベースのバイナリ列にマップする方法はありますか?

public class User 
{ 
    public virtual int Id { get; set; } 
    public virtual string Password { get; set; } 
} 

流暢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データ型です。プロパティが文字列(テキスト)なので、上記のマッピングは機能しません。私は何をすべきか?

答えて

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を伝えることができます。

+0

私は少し違っそれをやった:http://www.pastie.org/2162631 しかし、それは同じラインに沿っています。このアイデアは[こちら](http://wiki.fluentnhibernate.org/Fluent_mapping_private_properties) ありがとう! –

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[]>(); 
    } 
}