string值的长度超过了映射/参数中configuration的长度

我试图插入一些非常长的文本到stringprop – 它与LinqToSql完美的工作,现在我已经切换到NHibernate,并希望保存相同的实体,但nHibernate引发上述exception。

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

原来我的道具被定义为:

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

注:我有最新的nhibernate使用nuget。

对于这里的ref是字段:

  public virtual string Content { get; set; } public virtual string Fields { get; set; } 

我想避免去现场制作,并突然插入停止在这张桌子上工作….

这是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> 

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

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

 Map(x => x.Description).CustomType("StringClob").CustomSqlType("nvarchar(max)"); 

NHibernate默认的最大string长度是4000个字符。

如果你使用nHibernate Mapping Code(Not Fluent),我在这里find了解决scheme:

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

 Property(x => x.Description, c => { c.Column("Product"); c.Type(NHibernateUtil.StringClob); } ); 

我碰到类似的问题,但使用CustomType (从IUserType派生)。 事实certificate,比没有自定义types更容易修复。 所有你需要做的是定义SqlTypes显式地返回你想要的更长的string长度types。

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

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