我的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):
public static IProperty WithMaxLength(this IProperty propertyMap)
{
    return propertyMap.WithLengthOf(1000);
}

但是我得到了这个异常(exception):
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);
    }
}

内容是一个字节[]

查尔斯

最佳答案

最终,我发现Fluent Nhibernate的新版本解决了这个问题,您现在可以在byte []类型的属性之后使用.Length(),它可以完美地工作。

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

关于c# - 流利的NHibernate,varbinary(max)和SQLite,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1736754/

10-17 01:14