数据库字段为ntext时nhibernate配置文件不对导致页面修改后的数据无法得到

最近又遇一奇怪问题

为产品加入产品描述内容,包括英语、法语等6门语言的描述,而且需要可视化编辑用以网页展示。

当然,首选ckeditor,一个面页放6个ekeditor。

但马上发现问题,有的框能取到值,有的取不到,很容易想到是不是ckeditor这控件一下加载6个太多了导致的问题,后来改为点击文字后再加载,想想这样应该不会有这问题了吧。

但很快,多次测试后,还是有的值能取到有的不能,我测试的时候竟然发现每次输入hi ok这些简单的单词提交没问题,我以为是ckeditor检查拼字的原因,

于是其修改config.js文件:

  config.disableNativeSpellChecker = false;
    config.scayt_autoStartup = false;

但问题如故!

又是一番上网查资料、不停的测试找规律。

测试发现,输入简短单词没问题,长了出问题,我猛然想到是否是hbm配置文件错了(orm都是用codesmith自动生成的),

果然,配置是这样的:

<property name="Description" type="String">
   <column name="Description" length="16" sql-type="ntext" not-null="false"/>
</property>

而持久层文件如下:

virtual public string Description
{
 get { return _description; }
 set
 {
        if (value != null && value.Length > 16)
            throw new ArgumentOutOfRangeException("Invalid value for Title", value, value.ToString());
  _description = value;
 }
}
很明显当长度大于16会抛出异常导致值为空(这里看不到抛出的异常)。

一直怀疑是ckeditor的问题,原来是这里的问题,花了大半天时间,晕!

分别修改如下,问题解决:

<property name="Description" type="StringClob">
 <column name="Description" length="16" sql-type="ntext" not-null="false"/>
</property>

virtual public string Description
{
 get { return _description; }
 set
 {
  _description = value;
 }
}

posted @ 2011-01-20 16:23  Jela  阅读(423)  评论(0编辑  收藏  举报