Как установить значение по умолчанию для столбца таблицы в nhibernate 3.2, используя Mapping By Code? - PullRequest
2 голосов
/ 21 ноября 2011

Я использовал Fluent NHibernate в качестве механизма отображения для моих проектов NHibernate. Но когда дело дошло до NHibernate 3.2, я понял, что в нем есть сопоставление по встроенному коду, и никакие выпуски Fluent Nhibernate не будут опубликованы для NHibernate 3.2.

Я столкнулся с вопросом, когда я хочу установить значение по умолчанию для свойства объекта, я не нашел API для этого. Кто-нибудь может дать какой-нибудь совет?

Ответы [ 3 ]

6 голосов
/ 21 ноября 2011

Я еще не использовал отображение по коду, но класс NHibernate.Mapping.ByCode.Impl.ColumnMapper имеет метод Default(object defaultValue). Эта проблема в JIRA от NHibernate, кроме указания на предостережение, показывает, как ее использовать:

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

Это то, что вы искали?

5 голосов
/ 01 февраля 2014

Я нашел этот код.Может помочь тебе.

        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);
        });
0 голосов
/ 05 декабря 2013

При первом использовании базы данных установка значения по умолчанию в отображении не работает. Вы должны указать nhibernate работать со значением DataBase Default. Для этого сначала установите значение по умолчанию для столбца в вашей базе данных.

После этого вы указываете отображению nhibernate игнорировать столбец при вставке следующим образом:

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