posts - 67, comments - 120, trackbacks - 1, articles - 0

导航

公告

Castle ActiveRecord中ntext类型的映射

Posted on 2006-11-28 18:47 InterMa 阅读(...) 评论(...) 编辑 收藏
上半年弄了一个小的MIS系统,使用了Castle AR(for .net2.0, beta 3),其中一个类中有一个映射到ntext(sql server2000)的属性,发现最多只能存储进4000个unicode字符,当时研究了一下原因就是NHibernate默认String类型为nvarchar,save()的时候于是就被自动截断了,当时比较懒同时考虑4000个字符可能也够了(侥幸心理),就没管它。。。

后来客户每次见了我都问:“你那个程序能不能改一下,让它可以多输入一些字符,我们要%……¥%◎#¥(省略n字)”,昨天早上被客户电话吵醒,还是这个问题,终于受不了了,于是搜了一下,找到如下解决方案:

如果只是使用NHibernate的话,只要在映射文件中指定一下sql-type为ntext就可以了,但是AR给NHibernate包了一下,就没法用映射文件了,同时AR(beta 3)的[Property]特性中也没有sql-type参数,=.=
郁闷之余去了Castle官网,发现Castle已经RC2了(其中AR为RC1),然后看了一下PropertyAttribute属性文档,发觉sql-type已经加入了,这下容易了,原代码改成这样就可以了(注意ColumnType和SqlType):
    [Property("context", ColumnType = "StringClob", SqlType = "ntext")]
    
public string Context
    {
        
get { return this.context; }
        
set { this.context = value; }
    }

然后用AR RC1的dll替换原来beta3的,一切搞定,终于可以不用忍受客户的。。。(但愿如此)