Mam pole varbinary w mojej bazy danych serwera sql, który musi być varbinary (max). Tworzę bazę danych za pomocą NHibernate i używam Fluent Nhibernate do moich mapowań.Fluent NHibernate, varbinary (max) i SQLite
Używam również SQLite do moich testów jednostkowych, używam tych samych mapowań, po prostu zmieniam konfigurację przed utworzeniem bazy danych w pamięci.
Otrzymuję następujący problem.
I stworzył tę metodę rozszerzenia:
public static IProperty WithMaxVarBinaryLength(this IProperty propertyMap)
{
return propertyMap.CustomSqlTypeIs("varbinary(max)");
}
Działa dobrze na mojej stronie internetowej, baza danych jest tworzona z varbinary (max) pola, ale gdy uruchomię moich testów jednostkowych otrzymuję następujący wyjątek
System.Data.SQLite.SQLiteException: SQLite error near "max": syntax error
Potem znalazłem w innym pytanie na stackoverflow, że możemy to zrobić, aby stworzyć varbinary (max):
public static IProperty WithMaxLength(this IProperty propertyMap)
{
return propertyMap.WithLengthOf(1000);
}
Ale otrzymuję ten wyjątek:
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
w tej chwili jestem z pomysłem, nie chcę, aby utworzyć ręcznie wszystkie moje skrypty bazy danych i chcę kontynuować używanie SQLite dla moich testów jednostkowych.
Dzięki za pomoc.
Nawiasem mówiąc, oto moje pełne mapowanie, zauważ że użyłem moich metod rozszerzenia.
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);
}
}
Treść bajt []
Charles