NHibernate中DateTime,int,bool空值的处理方法
  我们知道,数据库中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

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号