NHibernate中DateTime空值的处理方法

本文详细介绍了在数据库中如何处理DateTime字段的null值问题,包括使用String类型代替DateTime类型、引入Nullables.dll解决null值问题,并提供了具体的实现步骤和代码示例。
数据库中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();
using CY_PUBLIC_LIBRARY.Middleware; using DoMain.Enum; using Microsoft.AspNetCore.Mvc; using Model.hospital_model; using Model.sys_model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DoMain { public class orderDomain:BaseDomain { public orderDomain(IFreeSql freeSql) : base(freeSql) { } /// <summary> /// 新增订单 /// </summary> /// <returns>string department_content</returns> public int AddOrder(int userId, string userName, int serviceItem_id, int hospital_id, int department_id, int service_type_id, DateTime serviceTime, int person_id,int staff_id ,string remark,bool mail_not,bool send_back,string shipping_address,string image,string services_hours,string sex,string address,string phone,string name, string consignee,string ConsigneesMobilePhoneNumber) { //服务项目 var service = _fsql.Select<sys_serviceItem>().Where(x => x.serviceItem_id == serviceItem_id).ToOne(); //医院、科室 var hospital = _fsql.Select<sys_hospital>().Where(x => x.hospital_id == hospital_id).ToOne(); if (hospital == null) throw new ServiceException("医院不存在"); var dept = _fsql.Select<sys_hospitaldepartment>().Where(x => x.hd_id == department_id).ToOne(); if (dept == null) throw new ServiceException("科室不存在"); //服务对象 var person = _fsql.Select<sys_orderperson>().Where(x => x.orderperson_id == person_id).ToOne(); if (person == null) throw new ServiceException("服务对象不存在"); //服务项目类型 var serviceType = _fsql.Select<sys_service_type>().Where(x => x.service_type_id == service_type_id).ToOne(); if (serviceType == null) throw new ServiceException("服务项目类型不存在"); //计算金额 decimal amount = serviceType.servicetype_price; //生成订单号 var orderNo = "ZBX" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + new Random().Next(100, 999); //写入订单 var order = new sys_order { order_no = orderNo, user_id = userId, serviceItem_id = serviceItem_id, hospital_id = hospital_id, department_id = department_id, //department_content=department_content, serviceTime = serviceTime, orderTime = DateTime.Now, person_id=person_id, pay_time=DateTime.Now, staff_id=staff_id, mail_not=mail_not, send_back=send_back, shipping_address=shipping_address, image=image, Service_hours=services_hours, sex=sex, adress = address, phone=phone, name=name, consignee=consignee, ConsigneesMobilePhoneNumber=ConsigneesMobilePhoneNumber, amount = amount, status =(int)wechat_refund_status.待付款, // 待支付 remark = remark }; order.ModelCreate(userId, userName); var orderId = (int)_fsql.Insert(order).ExecuteIdentity(); //订单状态日志 _fsql.Insert(new order_status_log { order_id = orderId, status = 0, change_time = DateTime.Now, remark = "下单成功" }).ExecuteAffrows(); return orderId; } /// <summary> /// 获取用户当前订单列表 /// </summary> /// <param name="status">订单状态</param> /// <param name="index">当前页</param> /// <param name="size">总页数</param> /// <returns></returns> public List<sys_order> GetOrder(int status, int index = 1, int size = 10) { var query = _fsql.Select<sys_order>().Where(x => x.user_id == _user_id); if (status >= 0) query = query.Where(x => x.status == status); var list = query.OrderByDescending(x => x.orderTime) .Page(index, size) .ToList(); return list; } /// <summary> /// 获取订单详情 /// </summary> /// <param name="order_id">订单ID</param> /// <returns></returns> /// <exception cref="ServiceException"></exception> public sys_order GetDetail(int order_id) { var order = _fsql.Select<sys_order>().Where(x => x.order_id == order_id && x.user_id == _user_id).ToOne(); return order; } } } 我的修改domain层该怎么写
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值