NHibernate ed il tipo uuid in Postgres

Versioni utilizzate:

  • Debian 4.0
  • NHibernate 1.2
  • Postgres 8.3
  • .NET/Mono 2.4.4

PostgreSQL 8.3 supporta nativamente gli uuid. Il supporto è però dato da un modulo esterno (basato su libossp) ma comunque ufficialmente supportato. È quindi necessario installare il modulo sul sistema:

~# apt-get install postgresql-contrib-8.3 libossp-uuid15

Per poter sfruttare le nuove funzioni bisogna eseguire il codice SQL contenuto nel modulo. Il meccanismo di templating dei DB fa sì che un nuovo DB venga creato a partire (copiato) da dei DB predefiniti. Dovendo usare gli uuid spesso ho scelto di caricare le funzioni nel template predefinito template1 e poi creare i nuovi DB a partire da questo: tutti i DB creati usando template1 come template avranno a disposizioni il tipo di dato uuid e le funzioni associate.

postgres=#\connect template1
template1=#\i /usr/share/postgresql/8.3/contrib/uuid-ossp.sql

<id name="uuid_column" column="uuid_column" type="string"  access="...">
	<generator class="uuid.hex">
		<param name="format">D</param>
	</generator>
</id>
public virtual string uuid_column {
	get { return _uuid_column;  }
}
private string _uuid_column;

Per colonne che non sono chiave primaria è sufficiente usare il tipo di dato a string e impostare come politica di generazione insert: quando l'oggetto verrà salvato l'uuid sarà generato da PostgreSQL.

<property  name="uuid_property" type="string" access="nosetter.lowercase-underscore" generated="insert">
	<column name="uuid_proerty" />
</property>

La classe C# avrà come properietà una semplice string:

public virtual string uuid_property {
	get { return _uuid_property;  }
}
private string _uuid_property;
Stampato da: http://lupulu.li/2010/05/nhibernate-ed-il-tipo-uuid-in-postgres/ .
© Your Name Here 2010.

Invia un commento

  • Archivi

  • Libri@aNobii