NHibernate中DateTime,int,bool空值的处理方法

      今天写程序的时候,写Add方法时,传入两个model(modelA、modelB),其中modelA的一个F_TimeStamp为0001-01-01(即空)。为了新建NEW了一个modelC,modelC取得modelA、modelB中的主键ID,并有一个F_TimeStamp字段,并且赋值dateTime.now。可是在save的时候报错,错误是modelC中的F_TimeStamp的SqlDateTime溢出。

      经过检测发现,不是我新增用的modelC的F_TimeStamp的错误,而是传入的modelA的F_TimeStamp为0001-01-01(即空)时,发生错误了。

      查找了相关资料发现:数据库中DateTime子段允许为空(null)。当我们在ASP.NET中映射为DateTime是就不允为空了。

 

      下面是博客园中的一个白菜的解释,挺实用的:

http://zsy.cnblogs.com/archive/2006/01/06/312488.html

  我们知道,数据库中DateTime子段允许为空(null)。当我们在ASP.NET中映射为DateTime是就不允为空了。该怎么处理?基本有两种办法:
(1)修改.hbm.xml文件中的类型,该"DateTime"为"String",该实体文件中的属性类型"DateTime"为"String"。
    处理的时候,该属性值要么为空,要么是具有正确日期格式的字符串。
  该方法只适合DateTime类型,而对int,bool类型就不适应了。下面就看第二种方法。
(2)Nullables处理
    (1)添加引用:Nullables.dll与Nullables.NHibernate.dll
    (2)修改配置文件.hbm.xml对应的类型,如:
   <property name="InDate" column="inDate" type="DateTime"/>修改为:
   <property name="InDate" column="inDate" type="Nullables.NHibernate.NullableDateTimeType,Nullables.NHibernate"/>
    (3)修改实体类文件,如:
    private DateTime _inDate;
      /// <summary>
      /// 添加日期
      /// </summary>
      public DateTime InDate
      {
           get { return _inDate; }
           set { _inDate = value;
     }   修改为:
     private Nullables.NullableDateTime _InDate;
      /// <summary>
      /// 添加日期
      /// </summary>
      [NHibernate.Mapping.Attributes.Property]
      public Nullables.NullableDateTime InDate
      {
           get { return _InDate; }
           set { _InDate = value; }
      }
     (4)给属性InDate赋值:
        Item clsItem = new Item();
        clsItem.InDate = new NullableDateTime(System.DateTime.Now);
        如果要输入空值,如:clsItem.InDate = nulll;

     (5)获取属性InDate的值:
        ItemCRUD clsCRUD = new ItemCRUD();  //对实体类的操作
        Item clsItem = clsCRUD.ItemDetails(id);  //获取实体类
        this.txtInDate.Text = clsItem.InDate.ToString();
       
        通过第二种方法可以对数据库中对应的整形、bool类型等赋空值。
        
        生成实体类的CodeSmith模版:/Files/zsy/NHibernate_Entity.rar
        生成.hbm.xml的CodeSmith模版:/Files/zsy/NHibernate_Mapping.rar

  我们知道,数据库中DateTime子段允许为空(null)。当我们在ASP.NET中映射为DateTime是就不允为空了。该怎么处理?基本有两种办法:
(1)修改.hbm.xml文件中的类型,该"DateTime"为"String",该实体文件中的属性类型"DateTime"为"String"。
    处理的时候,该属性值要么为空,要么是具有正确日期格式的字符串。
  该方法只适合DateTime类型,而对int,bool类型就不适应了。下面就看第二种方法。
(2)Nullables处理
    (1)添加引用:Nullables.dll与Nullables.NHibernate.dll
    (2)修改配置文件.hbm.xml对应的类型,如:
   <property name="InDate" column="inDate" type="DateTime"/>修改为:
   <property name="InDate" column="inDate" type="Nullables.NHibernate.NullableDateTimeType,Nullables.NHibernate"/>
    (3)修改实体类文件,如:
    private DateTime _inDate;
      /// <summary>
      /// 添加日期
      /// </summary>
      public DateTime InDate
      {
           get { return _inDate; }
           set { _inDate = value;
     }   修改为:
     private Nullables.NullableDateTime _InDate;
      /// <summary>
      /// 添加日期
      /// </summary>
      [NHibernate.Mapping.Attributes.Property]
      public Nullables.NullableDateTime InDate
      {
           get { return _InDate; }
           set { _InDate = value; }
      }
     (4)给属性InDate赋值:
        Item clsItem = new Item();
        clsItem.InDate = new NullableDateTime(System.DateTime.Now);
        如果要输入空值,如:clsItem.InDate = nulll;

     (5)获取属性InDate的值:
        ItemCRUD clsCRUD = new ItemCRUD();  //对实体类的操作
        Item clsItem = clsCRUD.ItemDetails(id);  //获取实体类
        this.txtInDate.Text = clsItem.InDate.ToString();
       
        通过第二种方法可以对数据库中对应的整形、bool类型等赋空值。
        
        生成实体类的CodeSmith模版:/Files/zsy/NHibernate_Entity.rar
        生成.hbm.xml的CodeSmith模版:/Files/zsy/NHibernate_Mapping.rar

 

 

转载于:https://www.cnblogs.com/cocole/archive/2009/07/08/1519334.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值