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[]>(); 
    } 
} 
相關問題