功能NHibernate,VARBINARY(max)和SQLite的
问题描述:
我有我的SQL Server数据库,需要加以VARBINARY(最大)一个VARBINARY场。我用NHibernate创建我的数据库,并使用Fluent Nhibernate作为我的映射。功能NHibernate,VARBINARY(max)和SQLite的
我也使用SQLite为我的单元测试,我使用相同的映射在内存中创建数据库之前,我只需要改变配置。
我碰到下面的问题。
我创造了这个扩展方法:
public static IProperty WithMaxVarBinaryLength(this IProperty propertyMap)
{
return propertyMap.CustomSqlTypeIs("varbinary(max)");
}
它工作在我的网站很好,数据库用VARBINARY(最大值)字段创建的,但是当我运行我的单元测试中,我得到下面的异常
public static IProperty WithMaxLength(this IProperty propertyMap)
{
return propertyMap.WithLengthOf(1000);
}
:
System.Data.SQLite.SQLiteException: SQLite error near "max": syntax error
然后我在计算器另一个问题,我们可以这样做是为了创建一个VARBINARY(最大值)发现
但我得到这个异常:
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);
}
}
内容是一个byte []
查尔斯
答
最后我发现功能NHibernate的新版本解决了此问题,现在可以字节的属性后,使用。长度() []类型,它完美的作品。
我也不得不更新我的NHibernate的DLL和修改一些代码在我的映射类,因为功能NHibernate的新版本已更名为新版本的一些方法。
答
使用SQL时精简版+的NHibernate单元测试也可能会遇到这个问题。
解决的办法是用2147483647
更换MAX的完整描述可以在这里找到:http://www.tigraine.at/2009/08/17/the-fairy-tale-of-binary-blob-fields/