NHibernate 3.2 + MSSQL Blob
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:
1 | < property name = 'Image' column = '`Iame`' /> |
Helyette a következő definíciót kell alkalmazni:
1 | < property name = 'Image' type = 'BinaryBlob' >< column name = '`Image`' sql-type = '`varbinary(max)`' /></ property > |