【问题标题】:How to set default value for table column in nhibernate 3.2 using Mapping By Code?如何使用 Mapping By Code 为 nhibernate 3.2 中的表列设置默认值?
【发布时间】:2012-01-02 17:59:01
【问题描述】:

我使用 Fluent NHibernate 作为我的 NHibernate 项目的映射机制。但是当谈到 NHibernate 3.2 时,我意识到它内置了代码映射,并且不会为 NHibernate 3.2 发布 Fluent Nhibernate 版本。

我想为实体属性设置默认值时遇到一个问题,我没有找到执行此操作的 API。谁能给点建议?

【问题讨论】:

    标签: nhibernate mapping mapping-by-code


    【解决方案1】:

    我还没有使用代码映射,但是NHibernate.Mapping.ByCode.Impl.ColumnMapper 类有一个方法Default(object defaultValue)。 NHibernate 的 JIRA 中的This issue,除了指出一个警告之外,还展示了如何使用它:

    mapper.Class<MyDomainObject>(map => map.Property
        (s => s.TermService, 
            pm => pm.Column(cm => cm.Default("'my default value'"))));
    

    这是你要找的吗?

    【讨论】:

      【解决方案2】:

      我找到了这段代码。可以帮助你。

              Property(x => x.Property, m =>
              {
                  m.Column("columnName");
                  // or
                  m.Column(c =>
                  {
                      c.Name("columnName");
                      c.Default("defaultValue");
                      c.SqlType("varchar(max)");
                      c.Length(SqlClientDriver.MaxSizeForLengthLimitedString + 1);
                      c.NotNullable(true);
                      c.Check("len(columnName) > 1");
                      c.Precision(2);
                      c.Scale(2);
                      c.Index("column_idx");
                      c.Unique(true);
                      c.UniqueKey("column_uniq");
                  });
                  m.Type<string>(); // or IUserType
                  m.Update(true);
                  m.Insert(true);
                  m.Formula("arbitrary SQL expression");
                  m.Access(Accessor.Field); // or Accessor.Property or Accessor.NoSetter
                  // or
                  m.Access(typeof(CustomAccessor));
                  m.OptimisticLock(false);
                  m.Generated(PropertyGeneration.Insert); // or PropertyGeneration.Always or PropertyGeneration.Never
                  m.Lazy(true);
              });
      

      【讨论】:

      【解决方案3】:

      首先使用数据库时,在映射中设置默认值不起作用。 您必须告诉 nhibernate 使用数据库默认值。 为此,首先为数据库中的列设置默认值。

      之后,您告诉 nhibernate 映射在插入时忽略该列:

      Property(x => x.PropertyName, map =>
              {   map.Insert(false);
                  map.Column("FL_COLUMN");                
                  map.NotNullable(true);
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 2013-07-13
        相关资源
        最近更新 更多