数据库字段为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;
}
}