Создание последовательного идентификатора для столбца первичного ключа в NHibernate

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

В базе данных тип данных столбца Id - uniqueidentifier. Я проверил официальную документацию и некоторые другие результаты веб-поиска. Но я не могу найти никакого решения. Вот что у меня есть сейчас:

public UserMap()
{
    Table("Users");
    Id(x => x.Id);
    Property(x => x.Username, x => x.NotNullable(true));
    Property(x => x.Email, x => x.NotNullable(true));
    Property(x => x.PasswordHash, x =>
    {
        x.NotNullable(true);
        x.Column("password_hash");
    });
}

person Sony    schedule 31.10.2016    source источник


Ответы (2)


Я так делаю:

В моих классах бизнес-сущностей

public abstract class EntityBase : IEntity
{
    public virtual Guid Id { get; protected set; }
    ...
}

Беглое отображение:

Id(x => x.Id).GeneratedBy.GuidComb();

Прочтите это о Гуиде .гребень

person ThommyB    schedule 01.11.2016

Проверьте документ Адама Бара

Сопоставление по коду - Id, NaturalId

Приведу цитату:

Наиболее распространенное сопоставление первичного ключа доступно через метод Id.

Id(x => x.Id, m =>
{
    m.Column("id");

    m.Generator(Generators.Native, g => g.Params(new
    {
        // generator-specific options
    }));

    m.Length(10);
    m.Type(new Int32Type());
    m.Access(Accessor.Field);
});

Отсутствуют некоторые функции, такие как несохраненное значение (будет добавлено в NHibernate 3.3) или параметры столбца DDL.

Наверное, самая важная опция - Генератор. Он определяет способ, которым NHibernate (или база данных) генерирует уникальные значения. Через статический класс Generators доступно 8 предопределенных типов генераторов:

public static class Generators
{
    ...

    // Guid
    public static IGeneratorDef Guid { get; }

    // sequential Guid
    public static IGeneratorDef GuidComb { get; }

Итак, исходя из этого, мы можем настроить отображение следующим образом:

public UserMap()
{
    Table("Users");
    Id(x => x.Id, m =>
    {
        m.Generator(Generators.GuidComb);
    }
    ...
person Radim Köhler    schedule 01.11.2016