2

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

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

4

3 回答 3

7

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

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

这是你要找的吗?

于 2011-11-21T10:31:15.027 回答
5

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

        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);
        });
于 2014-02-01T16:48:21.390 回答
1

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

之后,通过执行以下操作告诉 nhibernate 映射忽略插入时的列:

Property(x => x.PropertyName, map =>
        {   map.Insert(false);
            map.Column("FL_COLUMN");                
            map.NotNullable(true);
        });
于 2013-12-05T17:47:47.610 回答