2017-02-24 1 views
1

J'ai un problème avec NHibernate version 4.1.0 lorsque j'essaie d'insérer de grandes images en tant que tableau d'octets, dans un champ d'image dans SQL Server. Mon mappage ressemble à ceci:NHibernate ne parvient pas à valider la transaction en raison du type d'image

<property name="BinaryContent" column="MyContent" not-null="false" /> 

Le problème est qu'il est impossible de valider la transaction. Je pense que c'est dû à une troncature, car les petites images semblent bien fonctionner.

J'ai une solution à ce problème, en changeant la mise en correspondance et en spécifiant le type:

<property name="BinaryContent" column="MyContent" not-null="false" type="BinaryBlob" /> 

Mais le problème est qu'il est un très grand projet avec de nombreux fichiers de mappage que je dois changer. Je suis donc impatient de le faire globalement et automatiquement dans le projet.

Une solution?

(Note: en NHibernate 2.1 fonctionnait comme un charme)

Répondre

1

Non, je crains.
Pour SQL Server, vous devez utiliser vos mappages pour utiliser le type BinaryBlob lorsque vous avez besoin d'une longueur supérieure à 8000, ou vous devez définir explicitement votre longueur maxixum sur votre mappage.
byte[] prend par défaut la valeur Binary si le type de mappage n'est pas spécifié, voir doc. Quant à savoir pourquoi cela fonctionnait avec NH 2.1, je ne sais pas. Le numéro NH-2764 confirme cela. (Fermé comme "pas un problème".)

+1

Certaines versions antérieures de NHibernate corrompu des données en tronquant silencieusement dans certaines circonstances. –

+0

@OskarBerggren bon à savoir! Merci! – rpfc

+0

@ Frédéric merci beaucoup! Il est temps de modifier mes mappings alors ... – rpfc