NHibernate,处理字段NULL值的问题
在此之前,请先查看问题列表:
1、NHibernate,添加数据出错
2、NHibernate,能否给一个字段修改为null值?
示例表结构如下:
问题描述:
后台处理:
在此致谢:
1、NHibernate,添加数据出错
2、NHibernate,能否给一个字段修改为null值?
示例表结构如下:
CREATE TABLE [userinfo] (
[id] [int] IDENTITY (1, 1) NOT 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
[id] [int] IDENTITY (1, 1) NOT 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 之间。
说明: 执行当前 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;
}
}
{
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" />
<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();
}
{
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俱乐部”中的指点!