NHibernate, Automapping, как создать версию - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь использовать версию с Automapping в NHibernate.

Я бы ожидал, что при использовании этой конфигурации будет автоматически создаваться версия для каждой вновь добавленной записи, но вместо этого я получаю нулевое значение.

class Entity 
{
   public virtual Version { get; } 
}

 mapping
     .Version(prop => prop.Version)
     .Generated.Always()
     .Not.Nullable();

Я не уверен, как следует использовать версиюбыть настроенным в NHibernate, поэтому я хочу знать, правильно ли я делаю то, что я делаю.

Также есть ли способ настроить версию, не добавляя свойство Version в класс Entity?

1 Ответ

0 голосов
/ 09 ноября 2018

Нашел, что я должен сделать,

Поскольку я использую SqlServer в качестве хранилища данных, RowVersion имеет тип timestamp.

Так что мне пришлось сделать следующую конфигурацию

mapping
  .Version(prop => prop.Version)
  .CustomSqlType("timestamp") /// => add sql type
  .Generated.Always()
  .Not.Nullable();

И измените тип версии на байт []

public Entity
{
    public virtual byte[] Version{get;}
}

Это работает. Он автоматически сгенерирует метку времени.

Итак, если вы используете другие хранилища данных (например, Oracle), вы должны проверить, какой тип управления версиями, никогда не работал с любой другой реляционной БД, поэтому я не уверен в этом, но это стоит попробовать.

Обновление:

с использованием соглашений об автоматическом сопоставлении вместо создания сопоставления IAutoMappingOverride

public class VersionConvetion : IVersionConvention
{
    public void Apply(IVersionInstance instance)
    {
        instance
            .CustomSqlType("timestamp");

        instance
            .Generated.Always();

        instance
            .Not.Nullable();
    }
}

Тогда зарегистрируйте его

 /// => configure mappings, conventions, etc
            configuration
                .Mappings(map => map.AutoMappings
                .Add(AutoMap.AssemblyOf<Entity>(new AutomappingConfiguration())
                .Conventions.Setup(config =>
                {
                    config.Add<VersionConvetion>();
                })));
...