如何使用Mapping By Code在nhibernate 3.2中设置表列的默认值?

Liu*_*Liu 2 mapping nhibernate nhibernate-mapping-by-code

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

当我想为实体属性设置默认值时,我遇到了一个问题,我没有找到API来做到这一点.有人可以提一些建议吗?

Ger*_*old 6

我还没有使用代码映射,但是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'"))));
Run Code Online (Sandbox Code Playgroud)

这是你在找什么?


xwi*_*ing 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);
        });
Run Code Online (Sandbox Code Playgroud)