FLUEnt Nhibernate和PostgreSQL中的自动增量

时间:2010-10-06 10:06:58

标签: c# nhibernate postgresql fluent-nhibernate

Hai,我是Fluent Nhibernate的新手。

我有一个PostgreSQL数据库,我想要的是一个带有自动增量的生成ID。 我没有看到PostgreSQL中的功能自动增量,我理解为了在PostgreSQL中使用自动增量,我必须创建一个序列。

除了序列还有其他方法吗?

如果create sequence是唯一的方式,你能告诉我应该如何映射吗? 我尝试使用它并没有成功:

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

我在使用之前创建了hibernate-sequence

此致

3 个答案:

答案 0 :(得分:6)

奇怪,但如果您拨打Save(Object)而不是SaveOrUpdate(Object)

,则使用您的代码,插入工作正常

编辑#1

这对我有用。

实体:

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 :(得分:1)

  

我没有看到PostgreSQL中的功能自动增量

这是Frank提到的SERIAL数据类型。



只需将有问题的列创建为SERIAL,您就有了一个自动增量列:

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

然后你需要在Hibernate中将这些列注释为“自动增量”(因为我不使用Hibernate,我无法告诉你这是怎么做到的。)

答案 2 :(得分:0)

只需使用数据类型SERIAL