NHibernate,处理字段NULL值的问题

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

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

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

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

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

    
set
    
{
        _birthday 
= value;
    }

}

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

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

在此致谢:
 
  感谢小朱在QQ群“郑州dotNET俱乐部”中的指点!
posted @ 2005-12-28 12:20  jeky  阅读(3561)  评论(2编辑  收藏  举报
友情链接:逗死了笑话网 | 网络记事本