2009-11-15 72 views
7

我有我的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 []

查尔斯

回答

4

最后我发现功能NHibernate的新版本解决了此问题,现在可以字节的属性后,使用。长度() []类型,它完美的作品。

我也不得不更新我的NHibernate的DLL和修改一些代码在我的映射类,因为功能NHibernate的新版本已更名为新版本的一些方法。