NHibernate 连接PostgreSql的配置,以及generator配置id自增长

2 篇文章 0 订阅
1 篇文章 0 订阅

近期初次接触postgresql数据库,并要在项目中使用NHibernate进行访问和持久化,在这一过程中遇到了一些问题,主要是配置和id自增长的问题,现在将解决后的结果进行整理,以便后续参照
首先,在使用postgresql时需要在nuget中安装Npgsql,或者自己下载postgresql的包,然后引入Npgsql.dll
1、hibernate.cfg.xml配置

<?xml version="1.0" encoding="utf-8"?>
<!-- 
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it 
for your own use before compile tests in VisualStudio.
-->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="NHibernate.Test">
    <property name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
    //此处我的登录名称为postgres,密码为空
    <property name="connection.connection_string">
      Server=localhost;Database=database;User ID=postgres;Password=;
    </property>
    <property name="dialect">NHibernate.Dialect.PostgreSQL82Dialect</property>
  </session-factory>
</hibernate-configuration>

2、配置generator,使得id自增长,采用sequence方式,类似oracle。下面以Country类为例进行配置,Country类的定义如下:

 public class Country 
    {
        public virtual int Id { get; set; }
        public virtual string CountryName { get; set; }
        public virtual string CountryCode { get; set; }
    }

Country类mapping时,id自增长配置,Country.hbm.xml内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="LS.SGYC.Domain.BusinessObjects" assembly="LS.SGYC.Domain">
  <class name="LS.SGYC.Domain.BusinessObjects.Country, LS.SGYC.Domain" table="country" lazy="true">
    <id name="Id" column="id">
      <generator class="sequence">
        <param name="sequence">country_id_seq</param>
      </generator>
    </id>
    <property name="CountryName" column="countryname" />
    <property name="CountryCode" column="countrycode" />
  </class>
</hibernate-mapping>

关键在于sequence的名称country_id_seq,需要在postgresql数据库中新增一个序列,如下图:
这里写图片描述

这里写图片描述
PS:后来发现了postgresql中有一个Serial的字段类型,将主键设置成Serial,则无需手动创建sequence,pg数据库为自动为你生成,可以省去一部分手工操作,类似于MS SQL中的设置为自增
在这里插入图片描述

这里只需要设置递增量和当前值即可,其他的值系统会自动设置,这样所有的配置已经设置完成

GOOD LUCK!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值