2015-11-08 64 views
0

我有一個Account類,它包含Email,Firstname,LastnamePasswordHash
我想爲EmailPasswordHash創建值對象,然後在構造函數中使用正則表達式來擺脫普通字符串,並確保這些字段包含有效數據,但是我質疑,如何通過NHibernate持久化這個Account實體?
我該如何指示NHibernate將這些值作爲字符串存儲在數據庫中,但是當我請求時將它恢復爲值對象?
我是否必須爲它編寫DTO並將其映射回來或者有更好的方法?如何通過NHibernate中的代碼映射單字段值對象?

+1

如果你認爲這是對數據層的任務,使用自定義類型... –

+0

[VALUE的附表中可能的複製NHibernate上的對象](https://stackoverflow.com/questions/1331178/separate-table-for-value-objects-on-nhibernate) –

回答

0

域模型:

public class Email: ValueObjectBase<Email> 
{ 
    private readonly string _address; 
    public Email(string address) 
    { 
     _address = address; 
     Validate(); //check RegX 
    } 
} 

public class FullName: ValueObjectBase<FullName> 
{ 
    private readonly string _firstName; 
    private readonly string _lastName; 

    public FullName(string firstName, string lastName) 
    { 
     _firstName = firstName; 
     _lastName = lastName; 
     this.Validate(); 
    } 

    public string FirstName { get { return _firstName; } } 

    public string LastName { get { return _lastName; } } 
} 

public class Account : EntityBase<Guid>, IAggregateRoot 
{ 
    public virtual FullName FullName { get; set; } 
    public virtual Email Email { get; set; } 
} 

NHibernate的映射:

public class AccountMap : ClassMap<Account> 
{ 
     public AccountMap() 
     { 
      LazyLoad(); 
      Id(c => c.Id).GeneratedBy.Assigned(); 
      Component(c => c.FullName, m => 
      { 
       m.Map(Reveal.Member<FullName>("_firstName")).Column("FirstName").Length(30).Not.Nullable(); 
       m.Map(Reveal.Member<FullName>("_lastName")).Column("LastName").Length(40).Not.Nullable(); 
      }); 

      Component(c => c.Email, m => m.Map(Reveal.Member<Email>("_address")).Column("EmailAddress").Not.Nullable()); 


     } 
} 
相關問題