NHibernate 3.2 + MSSQL Blob

Furcsa dologgal kellett szembesülnöm a minap. Az MSSQL adatbázisban létrehoztam egy Blob mezőt (hogy pontosítsam magam, egy varbinary<max> mezőt), majd ebbe belepakoltam adatokat.

A visszaolvasáskor jött a szemkikerekedés, amikor is az adatok egy része jelent csak meg. Mintha a nagyobb része (46kb volt az adat) valahol elveszett volna. Jó sok nyomkövetés után döbbentem rá arra, hogy az MSSQL -be már  a beszúráskor hibásan kerülnek be az adatok. Konkrétan 8000 byte! Jó sok nyomozás után végül sikerült rátapintanom a lényegre. Az NHibernate 3.2 valamilyen okból kifolyólag rosszul kezeli a varbinary típust. Megoldást nem nagyon találtam hozzá, ezért a forrásokat letöltöttem és szépen végig követtem, mi lehet a probléma. Végül sikerült rálelnem, és javítottam is.

A megoldás a mapping -ban rejlik, pontosan definiálni kell a mezőt ahhoz, hogy rendesen kezelje.

Nem elég ez:

<property name='Image' column='`Iame`' />

Helyette a következő definíciót kell alkalmazni:

<property name='Image' type='BinaryBlob'><column name='`Image`' sql-type='`varbinary(max)`'/></property>

Related Posts