2013-06-28 115 views
1

我需要設置一個屬性「DynamicUpdate();」對於我的項目中的所有實體,但我不想在每個classmaps中複製代碼,這是怎麼回事?使用流利NHibernate映射所有實體的屬性

現在我classmaps的例子:

public CStatMessagesVOMap() 
     { 
      DynamicUpdate(); 
      Table("TBCSTATMESSAGES"); 
      Id(x => x.Id); 
      Map(x => x.Cstat).Not.Nullable(); 
      Map(x => x.Message).Length(500).Not.Nullable(); 
      Map(x => x.Allowed).Not.Nullable(); 
      References(x => x.DocumentKind).Column("DOCUMENTKIND").Cascade.None(); 
     } 

public DocumentKindVOMap() 
     { 
      DynamicUpdate(); 
      Table("TBDOCUMENTKIND"); 
      Id(x => x.DocumentKind).Column("DOCUMENTKIND"); 
      Map(x => x.Name).Length(20).Not.Nullable(); 
      Map(x => x.DocumentKind).CustomType<short>().Not.Nullable(); 
      HasMany(x => x.Messages).KeyColumn("DOCUMENTKIND").Inverse().Cascade.All(); 
     } 

回答

0

你可以做的就是從ClassMap<T>繼承AbstractMap<T>類和這個AbstractMap<T>繼承,所以在構造你可以調用DynamicUpdate()

public class AbstractMap<T> : ClassMap<T> 
    { 
     public AbstractMap() 
     { 
      DynamicUpdate(); 
     } 
    } 

public class CStatMessagesVOMap : AbstractMap<CstatMessagesVO> 
    { 
     public CStatMessagesVOMap() 
     { 
      Table("TBCSTATMESSAGES"); 
      Id(x => x.Id); 
      Map(x => x.Cstat).Not.Nullable(); 
      Map(x => x.Message).Length(500).Not.Nullable(); 
      Map(x => x.Allowed).Not.Nullable(); 
      References(x => x.DocumentKind).Column("DOCUMENTKIND").Cascade.None(); 
     } 

在這種情況下,所有繼承自AbstractMap<T>的類都會調用所需的方法。

+0

它工作得很好。謝謝。 –