NHibernate进行 Text字段映射

本文介绍了在NHibernate中遇到Text字段映射为String类型时,超过8000字符被截断的问题。通过查阅资料发现,需要在映射文件中明确指定sql-type来解决这个问题,例如将`<property ... type="String" />`改为`<property ... type="String" sql-type="Text" length="16" />`,这样可以确保字符串的完整保存,避免因默认设置导致的数据丢失。

NHibernate中对于字符型(以SQL Server数据类型为例,包括:charvarcharTextnvarcharnText等)的字段,映射到.Net类型时都为String

由于NHibernate的映射文件中每个属性映射是这样的:

<property name="Content" column="Content" type="String" />

没有对于数据库物理类型的说明。因此NHibernate按照默认(当然是NHibernate默认)的类型进行转换。因此.NetString类型,它对应多种物理类型,问题就出现了。当我不想让我的String类型属性对应默认的物理类型时该怎么办呢?

我在前一段的一个工程就发生了这样的问题,一个属性是String 类型,对应数据库的Text类型字段,但是当进行数据存储时,如果字符串长度超过了8000NHibernate就自动将其截断为4000长度(显然NHibernate默认String类型为nvarchar)。

查阅了《Hibernate2.1.2 Reference 》后,我发现如果不是NHibernate默认映射类型,就必须主动说明物理类型,具体的映射片断如下:

<property name="Content" type="String" >

              <column name="Content" sql-type="Text" length="16" />

         </property>

问题解决啦。Hibernate / NHibernate作为一个通用的不针对特定数据库的数据持久层框架,还是不可能脱离对数据库特定物理结构的说明,只不过我们在用数据持久化对象的时候就方便多了。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值