使用Fluent NHibernate映射所有实体的属性

时间:2013-06-28 19:12:58

标签: nhibernate mapping entity fluent

我需要设置属性“DynamicUpdate();”对于我项目中的所有实体,但我不想在每个类映射中复制代码,怎么做?

现在我的类图示例:

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

1 个答案:

答案 0 :(得分: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>继承的所有类都会调用您想要的方法。