Puede asignarlos como string
o AnsiString
.
<property name="MyBigUnicodeColumn" type="string" length="1000000"/>
<property name="MyBigAnsiColumn" type="AnsiString" length="1000000" />
Siempre que la longitud es más grande que 4000 o 8000, respectivamente, NH crea un nvarchar (max) o varchar (max).
Puede ser que la longitud se use para los parámetros sql y que se trunque a la longitud especificada (depende de la versión de NH que esté utilizando, hubo algunos cambios). Así que mejor especifique lo suficientemente grande.
Editar: Por desgracia, no funciona con el AnsiString lo mismo que con las cadenas normales. Leí un código NH y encontré lo siguiente:
varchar (max) es compatible con el dialecto de SQL Server 2005 en.
MsSql2000Dialect.cs, línea 205
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForLengthLimitedAnsiString, "VARCHAR($l)");
MsSql2005Dialect.cs, línea 19:
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForAnsiClob, "VARCHAR(MAX)");
Se registra varchar (max) como el tipo SQL para elegir cuando un AnsiString se asigna más grande entonces 8000.
En el SqlClientDriver.cs se puede ver que implementa "blobs" en los params para cadenas, pero no para strings ansi (línea 135):
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
dbParam.Size = MaxSizeForLengthLimitedAnsiString;
break;
// later on
case DbType.String:
case DbType.StringFixedLength:
dbParam.Size = IsText(dbParam, sqlType) ? MaxSizeForClob : MaxSizeForLengthLimitedString;
break;
Siempre pone 8000 como el límite del parámetro de tipo AnsiString.
Debido a la incoherencia entre el controlador y el dialecto, lo llamaría un error.
Debido a que el error ocurre en todas las AnsiStrings, no ayuda a especificar el tipo sql en la asignación (NH puede elegir el tipo de sql correcto).Es necesario utilizar la solución propuesta en el thread you started on the NH forum:
<property name="MyBigAnsiColumn" type="StringClob" sql-type="VARCHAR(max)" />
me informó que como un error: https://nhibernate.jira.com/browse/NH-3252
AnsiString es por definición una cadena no Unicode, por lo que este no sea quebrantada. Creo que esto solo cambiaría si futuros Servidores SQL ofrecieran nuevas formas de almacenar una cadena o una cadena ansi en la longitud especificada. –
Por otro lado, todo esto se implementa en el dialecto, y es bastante fácil tener su propio dialecto. –
Esto depende de la versión de NH que esté utilizando. Especifican la longitud al pasar los parámetros, para hacer que SQL Server reutilice las consultas. El cliente de SQL Server solía cortar datos, lo que era muy malo, por lo que verificaba la longitud. Si desea utilizar el agujero de 2 GB de longitud máxima, especifíquelo así ... –