Nhibernate 字符串值的长度超过了在映射/参数中配置的长度

Nhibernate 字符串值的长度超过了在映射/参数中配置的长度,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我正在尝试将一些很长的文本插入到字符串属性中-它与LinqToSql配合得非常好,现在我已经切换到NHibernate并希望保存相同的实体,但NHibernate引发了上述异常 我怎样才能解决这个问题 最初,我的道具被定义为: Map(x => x.Content, "fT_Content").Nullable(); Map(x => x.Fields, "fT_Fields").Nullable(); 现在他们是:这很有效但为什么我必须这样做

我正在尝试将一些很长的文本插入到字符串属性中-它与LinqToSql配合得非常好,现在我已经切换到NHibernate并希望保存相同的实体,但NHibernate引发了上述异常

我怎样才能解决这个问题

最初,我的道具被定义为:

        Map(x => x.Content, "fT_Content").Nullable();
        Map(x => x.Fields, "fT_Fields").Nullable();
现在他们是:这很有效但为什么我必须这样做

        Map(x => x.Content, "fT_Content").CustomSqlType("nvarchar(max)").Length(Int32.MaxValue).Nullable();
        Map(x => x.Fields, "fT_Fields").CustomSqlType("nvarchar(max)").Length(Int32.MaxValue).Nullable();
注意:我有使用nuget的最新nhibernate

对于ref,以下是字段:

    public virtual string Content
    {
        get;
        set;
    }

    public virtual string Fields
    {
        get;
        set;
    }

我希望避免进入现场生产,突然插入停止在此表上工作。

NHibernate中的默认最大字符串长度为4000个字符。

这是NHibernate处理nvarchar(max)的一个众所周知的问题,请参阅:

几年来,我一直在将nvarchar(max)列映射到StringClob,没有遇到任何问题:

<property name="myProp" column="MY_PROP" not-null="true" type="StringClob" access="property"></property>   
Map(_ => _.Body).Length(Int32.MaxValue);

我遇到了类似的问题,但使用了
CustomType
(源自
IUserType
)。事实证明,修复它比不使用自定义类型更容易。您所需要做的就是定义SqlTypes以显式返回所需的较长字符串长度类型

public SqlType[] SqlTypes
{
    get
    {
        // Explicitly specify the string max length 
        return new SqlType[] { SqlTypeFactory.GetString(Int32.MaxValue / 2) };
    }
}

这很好地解决了我们的问题。

如果您使用nHibernate代码映射(不流畅),我在这里找到了解决方案:


这是一个相当古老的问题,现在似乎有一个更直接的解决方案。我也遇到了同样的问题,在映射中将列的长度设置为Int32.MaxValue解决了这个问题:

<property name="myProp" column="MY_PROP" not-null="true" type="StringClob" access="property"></property>   
Map(_ => _.Body).Length(Int32.MaxValue);

因此,基于链接-我已经使用fluent nhibernate正确映射了?基于链接,是的。但我从未测试过它,因为StringClob对我来说非常适合。我有一个带有ntext列的遗留数据库。使用StringClob允许我在将列从ntext转换为nvarchar(max)时保持相同的映射。StringClob的fluent映射等价于什么?i、 什么是sytanx?我不知道。这个链接应该很有用:我们使用的一个快速解决方法是将
.Length(10000)
添加到文章的映射文件中,因为我们的文章是通过WYSIWYG编辑器添加的。:)2019年,最简单、最干净的答案。至少适用于NH4.0。在
*.hbm.xml
格式中:
。当然,在
length
属性中使用适合您的任何数字。