2013-06-28 4 views
1

Мне нужно установить свойство «DynamicUpdate();» для всех объектов в моем проекте, но я не хочу дублировать код в каждом классе, как это сделать?Сопоставление свойств для всех объектов с использованием Fluent 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

Что вы могли бы сделать, чтобы наследовать классы от AbstractMap<T> и это AbstractMap<T> наследует от ClassMap<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

Это работало очень хорошо. Благодарю. –