Автоинкремент FLuent Nhibernate и PostgreSQL - PullRequest
3 голосов
/ 06 октября 2010

Хай, я новичок в беглом Nhibernate.

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

Есть ли другой способ, кроме последовательностей?

Если create sequence - единственный способ, можете ли вы сказать мне, как я должен составить карту? Я пытался использовать это, но безуспешно:

mapping.Id(x => x.Id, "id").GeneratedBy.Sequence("hibernate-sequence");

Я создал hibernate-sequence перед его использованием.

Привет

Ответы [ 3 ]

6 голосов
/ 03 апреля 2011

Странно, но с вашим кодом вставка работает нормально, если вы вызываете Save(Object) вместо SaveOrUpdate(Object)

Edit # 1

Вот что у меня сработало.1008 * Entity:

public class Human
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
}

public class HumanMap : ClassMap<Human>
{
    public HumanMap()
    {
        this.Id(x => x.ID).CustomSqlType("Serial").GeneratedBy.Native();
        this.Map(x => x.Name);
    }
}

И конфигурация с экспортом схемы:

static ISessionFactory CreateSF()
{
    return Fluently
    .Configure()
    .Database(PostgreSQLConfiguration.Standard.ConnectionString("Server=127.0.0.1;Port=5432;Database=fnhtest;User=postgres;Password=password"))
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>())
    .ExposeConfiguration(cfg => { new SchemaExport(cfg).Create(false, true); })
    .BuildSessionFactory(); 
}
1 голос
/ 04 января 2011

Я не видел автоматического увеличения функции в PostgreSQL

Это тип данных SERIAL, упомянутый Фрэнком.

Просто создайте рассматриваемый столбец как SERIAL, и у вас есть столбец с автоинкрементом:

CREATE TABLE the_table (
  id serial not null primary key,
  other_column varchar(20), 
  ...
);

Затем вам нужно аннотировать эти столбцы как «автоинкремент» в Hibernate (так как я не использую Hibernate,Я не могу сказать вам, как именно это делается).

0 голосов
/ 06 октября 2010

Просто используйте тип данных SERIAL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...