В моей базе данных сервера sql есть поле varbinary, которое должно быть varbinary (max). Я создаю свою базу данных с помощью NHibernate и использую Fluent Nhibernate для своих отображений.
Я также использую SQLite для своих модульных тестов, я использую те же сопоставления, я просто изменяю конфигурацию перед созданием базы данных в памяти.
У меня возникает следующая проблема.
Я создал этот метод расширения:
public static IProperty WithMaxVarBinaryLength(this IProperty propertyMap)
{
return propertyMap.CustomSqlTypeIs("varbinary(max)");
}
На моем сайте работает нормально, база данных создается с полем varbinary (max), но когда я запускаю свои модульные тесты, я получаю следующее исключение
System.Data.SQLite.SQLiteException: SQLite error near "max": syntax error
Затем я обнаружил в другом вопросе о стековом потоке, что мы можем сделать это для создания varbinary (max):
public static IProperty WithMaxLength(this IProperty propertyMap)
{
return propertyMap.WithLengthOf(1000);
}
Но я получаю это исключение:
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
На данный момент у меня нет идеи, я не хочу создавать вручную все мои скрипты базы данных, и я хочу продолжать использовать SQLite для своих модульных тестов.
Спасибо за помощь.
Кстати, вот мое полное отображение, обратите внимание, что я использовал мои методы расширения.
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);
}
}
Контент является байтом []
Charles