Nous faisons exactement cela avec le "original" Java Hibernate3. Vous mappez simplement une propriété de tableau d'octets de votre classe persistante dans une colonne de type "image".
package com.hibernate.pdf.sample;
public class TPDFDocument implements java.io.Serializable {
private Integer pdfDocumentId;
private byte[] document;
public Integer getPdfDocumentId() {
return this.pdfDocumentId;
}
public void setPdfDocumentId(Integer pdfDocumentId) {
this.pdfDocumentId = pdfDocumentId;
}
public byte[] getDocument() {
return this.document;
}
public void setDocument(byte[] document) {
this.document = document;
}
}
Hibernate Mapping:
<hibernate-mapping>
<class name="com.hibernate.pdf.sample.TPDFDocument" table="T_PDFDocument">
<id name="pdfDocumentId" type="integer">
<column name="pdfDocumentId" />
<generator class="identity" />
</id>
<property name="document" type="binary">
<column name="document" not-null="true" />
</property>
</class>
</hibernate-mapping>
création de la table:
CREATE TABLE [dbo].[T_PDFDocument](
[pdfDocumentId] [int] IDENTITY(1,1) NOT NULL,
[document] [image] NOT NULL,
CONSTRAINT [PK_PDFDocument] PRIMARY KEY CLUSTERED
(
[pdfDocumentId] ASC
)
Tout ce que vous avez à faire est de lire les documents octets bruts dans le tableau et persister il. Dans notre cas, les documents ne dépasseront guère 1Mo, donc le fait de placer le tout dans le byte-array ne causera pas de problèmes de performance. Peut-être que cette solution n'est pas faisable pour les documents très volumineux.
Je suppose qu'avec l'implémentation de NHibernate et C#, la solution sera très similaire.