我要新增一张销售订单,分别由订单和订单明细组成,正常情况下新增没有问题。
当必填项为空保存失败回滚后,填入必填项却怎么都保存不了。断点看了下订单和订单明细的对象中该赋的值都有了,迷茫。
//订单类
public class T_Order
{
protected string _id;
protected IList _orderDetail; virtual public string Id
{
get { return _id; }
set { _id = value; }
} virtual public IList DetailList
{
get
{
if (_orderDetail == null)
{
_orderDetail = new ArrayList();
}
return _orderDetail;
}
set { _orderDetail = value; }
} }//订单明细类
public class T_OrderDetail
{
protected string _id;
protected T_Order _order; virtual public string Id
{
get { return _id; }
set { _id = value; }
} virtual public T_Order Order
{
get { return _order; }
set { _order = value; }
}
}实现代码如下://增加明细事件
private void btnAddRow_Click(object sender, EventArgs e)
{
T_OrderDetail od = dtsOrderDetail.AddNew() as T_OrderDetail;
_order.DetailList.Add(od);
}//保存事件
private void btnSave_Click(object sender, EventArgs e)
{
Save(_order);
}//保存订单
private void Save(T_Order order)
{
foreach (T_OrderDetail listObject in order.DetailList)
{
listObject.Order = order;
} try
{
ITransaction tx = NHHelper.Instance.GetSession().BeginTransaction();
NHHelper.Instance.GetSession().Save(order);
tx.Commit();
}
catch (Exception e)
{
tx.Rollback();
}
}
当必填项为空保存失败回滚后,填入必填项却怎么都保存不了。断点看了下订单和订单明细的对象中该赋的值都有了,迷茫。
//订单类
public class T_Order
{
protected string _id;
protected IList _orderDetail; virtual public string Id
{
get { return _id; }
set { _id = value; }
} virtual public IList DetailList
{
get
{
if (_orderDetail == null)
{
_orderDetail = new ArrayList();
}
return _orderDetail;
}
set { _orderDetail = value; }
} }//订单明细类
public class T_OrderDetail
{
protected string _id;
protected T_Order _order; virtual public string Id
{
get { return _id; }
set { _id = value; }
} virtual public T_Order Order
{
get { return _order; }
set { _order = value; }
}
}实现代码如下://增加明细事件
private void btnAddRow_Click(object sender, EventArgs e)
{
T_OrderDetail od = dtsOrderDetail.AddNew() as T_OrderDetail;
_order.DetailList.Add(od);
}//保存事件
private void btnSave_Click(object sender, EventArgs e)
{
Save(_order);
}//保存订单
private void Save(T_Order order)
{
foreach (T_OrderDetail listObject in order.DetailList)
{
listObject.Order = order;
} try
{
ITransaction tx = NHHelper.Instance.GetSession().BeginTransaction();
NHHelper.Instance.GetSession().Save(order);
tx.Commit();
}
catch (Exception e)
{
tx.Rollback();
}
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" schema="dbo">
<class name="WareHouse.Entities.T_Order, WareHouse.Entities" table="T_OrderHead">
<id name="Id" column="ID" type="System.String">
<generator class="WareHouse.Logic.IdHelper,WareHouse.Logic"/>
</id>
<bag name="DetailList" inverse="true" lazy="true" table="T_OrderDetail">
<key column="OrderID"/>
<one-to-many class="WareHouse.Entities.T_OrderDetail, WareHouse.Entities"/>
</bag>
</class>
</hibernate-mapping>
T_OrderDetail.hbm.xml<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" schema="dbo">
<class name="WareHouse.Entities.T_OrderDetail, WareHouse.Entities" table="T_OrderDetail">
<id name="Id" column="ID" type="System.String" unsaved-value="null">
<generator class="WareHouse.Logic.IdHelper,WareHouse.Logic"/>
</id>
<many-to-one name="Order" class="WareHouse.Entities.T_Order, WareHouse.Entities">
<column name="OrderID" length="25" sql-type="varchar" not-null="false"/>
</many-to-one>
</class>
</hibernate-mapping>
高手们救命啊~~~
这句打断点看一下是否执行到这里了。还有不存不了报错了没有啊?
再保存的时候所以不成功.在异常后.是不是可以把对象从Session中脱离. Session.Evict(order)
如果改为cascade="all"保存又没问题,但不能级联删除。
{
protected string _id;
protected IList _orderDetail = new ArrayList(); virtual public string Id
{
get { return _id; }
set { _id = value; }
} virtual public IList DetailList
{
get
{
return _orderDetail;
}
set { _orderDetail = value; }
} }