isessionfactory fluently example nhibernate fluent-nhibernate

nhibernate - fluently - La longitud del valor de cadena excede la longitud configurada en la asignación/parámetro



nhibernate download c# (4)

Este es un problema bien conocido con NHibernate manejando nvarchar (max), ver:

http://geekswithblogs.net/lszk/archive/2011/07/11/nhibernatemapping-a-string-field-as-nvarcharmax-in-sql-server-using.aspx

Desde hace algunos años, he estado asignando columnas nvarchar (max) a StringClob sin encontrar ningún problema:

<property name="myProp" column="MY_PROP" not-null="true" type="StringClob" access="property"></property>

Este enlace (de los comentarios) describe el mapeo fluido requerido para solucionar este problema:

http://www.tritac.com/bp-21-fluent-nhibernate-nvarcharmax-fields-truncated-to-4000-characters

Map(x => x.Description).CustomType("StringClob").CustomSqlType("nvarchar(max)");

Estoy tratando de insertar un texto muy largo en un apuntador de cadenas; funcionó perfectamente con LinqToSql, ahora he cambiado a NHibernate y quiero guardar la misma entidad, pero nHibernate arroja la excepción anterior.

¿Cómo puedo arreglar esto?

Originalmente mis accesorios fueron definidos como:

Map(x => x.Content, "fT_Content").Nullable(); Map(x => x.Fields, "fT_Fields").Nullable();

ahora lo son: esto funciona, pero ¿por qué tengo que hacer esto?

Map(x => x.Content, "fT_Content").CustomSqlType("nvarchar(max)").Length(Int32.MaxValue).Nullable(); Map(x => x.Fields, "fT_Fields").CustomSqlType("nvarchar(max)").Length(Int32.MaxValue).Nullable();

Nota: Tengo el último nhibernate usando Nuget.

Para ref aquí están los campos:

public virtual string Content { get; set; } public virtual string Fields { get; set; }

Quiero evitar ir a producción en vivo y, de repente, las inserciones dejan de funcionar en esta mesa ...


Me tocó un problema similar pero usando un CustomType (derivado de IUserType ). Resulta ser más fácil de arreglar que sin un tipo personalizado. Todo lo que necesita hacer es definir SqlTypes para devolver explícitamente el tipo de longitud de cadena más larga que desee.

public SqlType[] SqlTypes { get { // Explicitly specify the string max length return new SqlType[] { SqlTypeFactory.GetString(Int32.MaxValue / 2) }; } }

Esto resolvió el problema bastante bien para nosotros.



La longitud de cadena máxima predeterminada en NHibernate es de 4000 caracteres.