频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

全程记录:C#.NET使用NHibernate 1.0 XML映射中容易出错的地方

作者: 天很蓝_崇崇 出处:网页教学网  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2006-11-06 15:12
关 键 词:Java  C#  .NET  NHibernate
阅读提示:本文全程记录了C#.NET使用NHibernate 1.0 XML映射中容易出错的地方,并且附带有程序代码。

1、数据库中是bit类型的数据 hbm.xml映射文件中的类型可以为Int32或是boolean

关于数据库中是bit类型的数据,hbm.xml映射文件中的类型可以为Int32,千万不要写成int,那是错误的。也可以为boolean或是Boolean,但是别写成bool,否则也会出错的!!

2、实体数据定义里的类型要和XML映射文件中定义的类型一致

public string IP //只读属性
{
get /* 注意注释掉可写属性,绑定此数据的时候会报错 */
{
this.ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString() ;
return this.ip ;
}
}

在这里确定好类型以后,在实体数据定义里的类型要和XML映射文件中定义的类型一致,大家看下面的定义就不一致。

XML映射文件


数据实体文件

public int IsPass
{
get{ return this.isPass ; }
set{ this.isPass = value ; }
}


如果你像上面那样写的画,会报错如下:

Server Error in '/MyNH' Application.
--------------------------------------------------------------------------------
Specified cast is not valid.
Description: An unhandled exception occurred during the execution of the current web

request. Please review the stack trace for more information about the error and where it

originated in the code.
Exception Details: System.InvalidCastException: Specified cast is not valid.
Source Error:

Line 68:     try
Line 69:     {
Line 70:      session.Save( userEntity );//保存数据实体
Line 71:      session.Flush() ;
Line 72:
transaction.Commit() ; //提交事务

正确的应该写成这样:

XML映射文件

数据实体文件

public bool IsPass
{
get{ return this.isPass ; }
set{ this.isPass = value ; }
}


3、应该将可读写属性绑定到服务器控件上

在你把NH返回的IList对象绑定到DataGrid等服务器控件的时候要注意,如果你得服务器控件使用了一个属性。

比如说是IP,虽然这个属性完全可以定义为只读的,但是如果你需要把这个属性绑定到DataGrid等服务器控件的某一个列的话,那么就请你需要特别的注意了。

你需要把这个只读属性定义成一个可以读写的属性, 虽然定义为可写的对你来说没有任何意义,但是NH需要写属性才可以绑定到正确的数据,否则,会报如下的错误:

如下代码,DataGrid使用(绑定)了IP这个属性

public string IP //只读属性
{
get
{
this.ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString() ;
return this.ip ;
}
}

Server Error in '/MyNH' Application.
--------------------------------------------------------------------------------
Property set method not found.
Description: An unhandled exception occurred during the execution of the current web

request. Please review the stack trace for more information about the error and where it

originated in the code.
Exception Details: System.ArgumentException: Property set method not found.
Source Error:
Line 53:using( ISession session = NHelper.Sessions().OpenSession() ) //获取会话工厂的当前会话
Line 54:{
Line 55:return session.Find( "from CHONGCHONG.MyNH.Business.UserEntity" ) ;
Line 56:}
Line 57:}
Source File: d:\chongchong\chongchong_web\mynh\business\businesslogic\businesslogic.cs   

Line:55
Stack Trace:

正确的代码应该这样:

public string IP
{
get
{
this.ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString() ;
return this.ip ;
}
set /* 注意注释掉可写属性,绑定此数据的时候会报错 */
{
this.ip = value ;
}
}

另外还要注意一点, 如果你返回的IList集合为空的话,直接将返回的数据绑定到你的控件上,也会报错!!

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)


发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52371次)
·UML类图详解 (查看46839次)
·Java编程开发手册 (查看25118次)
·UML统一建模语言 (查看24099次)
·C#技术开发指南 (查看22406次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (251个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有