C# Fluent NHibernate、varbinary(max)和SQLite

C# Fluent NHibernate、varbinary(max)和SQLite,c#,.net,nhibernate,fluent-nhibernate,mapping,C#,.net,Nhibernate,Fluent Nhibernate,Mapping,我的sql server数据库中有一个varbinary字段,它必须是varbinary(max)。我使用NHibernate创建数据库,并使用Fluent NHibernate进行映射 我还使用SQLite进行单元测试,我使用的映射与在内存中创建数据库之前更改配置的映射相同 我有以下问题 我创建了这个扩展方法: public static IProperty WithMaxVarBinaryLength(this IProperty propertyMap) { return p

我的sql server数据库中有一个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
然后我在stackoverflow的另一个问题中发现,我们可以这样做来创建一个varbinary(max):

但我有一个例外:

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);
    }
}
公共类AttachmentFileMap:ClassMap
{
公共附件文件映射()
{
WithTable(“附件文件”);
Id(x=>x.Id).GeneratedBy.Identity();
映射(x=>x.Content).WithMaxVarBinaryLength();
Map(x=>x.ContentType);
映射(x=>x.FileName);
映射(x=>x.ContentLength);
}
}
内容是一个字节[]


Charles

最后,我发现Fluent Nhibernate的新版本纠正了这个问题,现在可以在byte[]类型的属性之后使用.Length(),它工作得非常好


我还必须更新我的Nhibernate dll并更改映射类中的一些代码,因为Fluent Nhibernate的新版本已经重命名了新版本中的一些方法。

在使用SQL lite+Nhibernate进行单元测试时,您也可能会遇到这个问题

解决方案是用2147483647替换MAX

完整说明可在此处找到:

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);
    }
}