NHibernate,处理字段NULL值的问题

在此之前,请先查看问题列表:
1、 NHibernate,添加数据出错
2、 NHibernate,能否给一个字段修改为null值?

示例表结构如下:
None.gif CREATE   TABLE   [ userinfo ]  (
None.gif    
[ id ]   [ int ]   IDENTITY  ( 1 1 NOT   NULL  ,
None.gif    
[ name ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
None.gif    
[ sex ]   [ bit ]   NULL   CONSTRAINT   [ DF_userinfo_sex ]   DEFAULT  ( 1 ),
None.gif    
[ hit ]   [ int ]   NULL   CONSTRAINT   [ DF_userinfo_hit ]   DEFAULT  ( 0 ),
None.gif    
[ birthday ]   [ smalldatetime ]   NULL  ,
None.gif    
[ regdate ]   [ smalldatetime ]   NULL   CONSTRAINT   [ DF_userinfo_regdate ]   DEFAULT  ( getdate ()),
None.gif    
CONSTRAINT   [ PK_userinfo ]   PRIMARY   KEY    CLUSTERED  
None.gif    (
None.gif        
[ id ]
None.gif    )  
ON   [ PRIMARY ]  
None.gif
ON   [ PRIMARY ]
None.gif
GO

问题描述:
 
  因为 birthday 在数据库里是“smalldatetime”类型,所以我们在创建表实体、以及xml映射的时候,可能会把 birthday 的类型设置为“DateTime”。但是经过这样的设置后,可能会出现以下错误提示:

None.gif SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。 
None.gif说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
None.gif 
None.gif异常详细信息: System.Data.SqlTypes.SqlTypeException: SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。
None.gif

解决方法:
 
  当库中的字段为 DateTime 类型的时候,我们在创建表实体、以及xml映射的时候,应该将类型设置为“String”。像这样:
None.gif public   string  Birthday
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
get
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
return _birthday;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
set
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        _birthday 
= value;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif < property  name ="Name"  column ="name"  type ="String"  length ="50"   />
None.gif
< property  name ="Sex"  column ="sex"  type ="Boolean"  length ="1"   />
None.gif
< property  name ="Hit"  column ="hit"  type ="Int32"  length ="4"   />
None.gif
< property  name ="Birthday"  column ="birthday"  type ="String"  length ="50"   />

  后台处理:
None.gif private   void  Button2_Click( object  sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    Configuration cfg 
= new Configuration();
InBlock.gif    cfg.AddXmlFile(Server.MapPath(
"NHEntity/userinfo.hbm.xml"));
InBlock.gif    ISession iS 
= cfg.BuildSessionFactory().OpenSession();
InBlock.gif    ITransaction iT 
= iS.BeginTransaction();
InBlock.gif    UserInfo ui 
= (UserInfo) iS.Load(typeof(UserInfo), 3);
InBlock.gif    ui.Name 
= "August";
InBlock.gif    ui.Sex 
= false;
InBlock.gif    ui.Hit 
= 68;
InBlock.gif    ui.Birthday 
= null// 映射为String类型后,可以直接赋值为NULL
InBlock.gif
    iS.Update(ui);
InBlock.gif    iT.Commit();
InBlock.gif    iS.Close();
ExpandedBlockEnd.gif}

在此致谢:
 
  感谢小朱在QQ群“郑州dotNET俱乐部”中的指点!

转载于:https://www.cnblogs.com/jeky/archive/2005/12/28/306424.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值