Ho un campo varbinary nel mio database sql server che deve essere varbinary (max). Creo il mio database con NHibernate e utilizzo Fluent Nhibernate per i miei mapping.Fluente NHibernate, varbinary (max) e SQLite
Uso anche SQLite per i miei test di unità, utilizzo gli stessi mapping, cambio solo la configurazione prima di creare il database in memoria.
Ho il seguente problema.
Ho creato questo metodo di estensione:
public static IProperty WithMaxVarBinaryLength(this IProperty propertyMap)
{
return propertyMap.CustomSqlTypeIs("varbinary(max)");
}
Funziona benissimo sul mio sito web, il database viene creato con un campo varbinary (max), ma quando ho eseguito il mio test di unità ottengo la seguente eccezione
System.Data.SQLite.SQLiteException: SQLite error near "max": syntax error
Poi ho trovato in un'altra domanda su StackOverflow che possiamo fare questo per creare un varbinary (max):
public static IProperty WithMaxLength(this IProperty propertyMap)
{
return propertyMap.WithLengthOf(1000);
}
ma ottengo questa eccezione:
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
Per il momento sono fuori di idea, io non voglio avere a creare manualmente tutti i miei script di database e voglio continuare a utilizzare SQLite per i miei test di unità.
Grazie per l'aiuto.
A proposito, ecco la mia mappatura completa, nota che ho usato i miei metodi di estensione.
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);
}
}
dei contenuti è un byte []
Charles