2009-11-15 15 views
7

Tengo un campo varbinary en mi base de datos del servidor sql que debe ser varbinary (max). Creo mi base de datos con NHibernate y uso Fluent Nhibernate para mis asignaciones.Fluido NHibernate, varbinary (max) y SQLite

También uso SQLite para mis pruebas unitarias, utilizo las mismas asignaciones. Solo cambio la configuración antes de crear la base de datos en la memoria.

Me aparece el siguiente problema.

he creado este método de extensión:

public static IProperty WithMaxVarBinaryLength(this IProperty propertyMap) 
{ 
    return propertyMap.CustomSqlTypeIs("varbinary(max)"); 
} 

Funciona bien en mi sitio web, la base de datos se crea con un campo varbinary (max), pero cuando corro mis pruebas de unidad me sale el siguiente excepción

System.Data.SQLite.SQLiteException: SQLite error near "max": syntax error 

Entonces me encontré en otra pregunta en stackOverflow que podemos hacer esto para crear un varbinary (max):

public static IProperty WithMaxLength(this IProperty propertyMap) 
{ 
    return propertyMap.WithLengthOf(1000); 
} 

pero me da esta excepción:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Content is not a string. at FluentNHibernate.Mapping.PropertyMap.WithLengthOf(Int32 length) in d:\Builds\FluentNH\src\FluentNHibernate\Mapping\PropertyMap.cs:line 166 

Por el momento estoy fuera de la idea, yo no quiero tener que crear manualmente todos mis scripts de base y quiero seguir usando SQLite para mis pruebas unitarias.

Gracias por la ayuda.

Por cierto, aquí está mi mapeo completo, tenga en cuenta que utilicé mis métodos de extensión.

public class AttachmentFileMap : ClassMap<AttachmentFile> 
{ 
    public AttachmentFileMap() 
    { 
     WithTable("AttachmentFiles"); 

     Id(x => x.Id).GeneratedBy.Identity(); 
     Map(x => x.Content).WithMaxVarBinaryLength(); 
     Map(x => x.ContentType); 
     Map(x => x.FileName); 
     Map(x => x.ContentLength); 
    } 
} 

contenido es un byte []

Charles

Respuesta

4

Finalmente descubrí que la nueva versión de Fluido Nhibernate corrige este problema, ahora se puede utilizar .length() después de una propiedad de bytes [] escriba y funciona perfectamente.

También tuve que actualizar mi dll de Nhibernate y cambiar algunos códigos en mis clases de mapeos porque la nueva versión de Fluent Nhibernate ha cambiado el nombre de algunos métodos en la nueva versión.

Cuestiones relacionadas