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

Har*_*oon 40 nhibernate fluent-nhibernate

我试图将一些非常长的文本插入到字符串prop中 - 它与LinqToSql完全一致,现在我已切换到NHibernate并希望保存相同的实体,但nHibernate会抛出上述异常.

我怎样才能解决这个问题?

最初我的道具被定义为:

        Map(x => x.Content, "fT_Content").Nullable();
        Map(x => x.Fields, "fT_Fields").Nullable();
Run Code Online (Sandbox Code Playgroud)

现在他们是:这有效,但为什么我必须这样做?

        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();
Run Code Online (Sandbox Code Playgroud)

注意:我使用nuget有最新的nhibernate.

对于ref,这里是字段:

    public virtual string Content
    {
        get;
        set;
    }

    public virtual string Fields
    {
        get;
        set;
    }
Run Code Online (Sandbox Code Playgroud)

我想避免去生产,突然插入停止在这张桌子上工作....

jbl*_*jbl 72

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

http://geekswithblogs.net/lszk/archive/2011/07/11/nhibernatemapping-a-string-field-as-nvarcharmax-in-sql-server-using.aspx

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

<property name="myProp" column="MY_PROP" not-null="true" type="StringClob" access="property"></property>   
Run Code Online (Sandbox Code Playgroud)

此链接(来自评论)描述了解决此问题所需的流畅映射:

http://www.tritac.com/bp-21-fluent-nhibernate-nvarcharmax-fields-truncated-to-4000-characters

Map(x => x.Description).CustomType("StringClob").CustomSqlType("nvarchar(max)");
Run Code Online (Sandbox Code Playgroud)


Mr *_*ush 9

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


Ric*_*chi 8

如果您使用nHibernate Mapping By Code(非流利),我在这里找到了解决方案:

https://groups.google.com/forum/#!topic/nhusers/uDAcP4BqFUU

Property(x => x.Description, c =>
   {
      c.Column("Product");
      c.Type(NHibernateUtil.StringClob);
   }
);
Run Code Online (Sandbox Code Playgroud)