NHibernate 1对多的问题
子实体,使用了复合主键,我在网上找了很多方法,还是没解决,以下是代码和异常:
order的实体和映射
namespace NhTest.Model
{
[Serializable]
public class Order
{
public virtual int ID { get; set; }
public virtual String CustomerName { get; set; }
public virtual decimal TotalAmt { get; set; }
public virtual DateTime Created { get; set; }
public virtual String Status { get; set; }
public virtual IList<OrderDetail> Items { get; set; }
}
}<?xml version="1.0" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NhTest"
namespace="NhTest.Model">
<class name="Order" table="[Order]">
<id name="ID">
<generator class="native" />
</id>
<property name="Created" />
<property name="CustomerName"/>
<property name="TotalAmt" column="Amt"/>
<property name="Status"/>
<bag name="Items" table="OrderDetail" generic="true" inverse="true" cascade="all">
<key column="OrderID" foreign-key="FK_OrderDetail"></key>
<one-to-many class="OrderDetail"/>
</bag>
</class>
</hibernate-mapping>orderdetail 的实体和映射
public class OrderDetailPK
{
public virtual int OrderID { get; set; }
public virtual int RowNumber { get; set; }
public override bool Equals(object obj)
{
if (obj is OrderDetailPK)
{
var second = obj as OrderDetailPK;
if (this.OrderID == second.OrderID
&& this.RowNumber == second.RowNumber)
{
return true;
}
else return false;
}
return false;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
[Serializable]
public class OrderDetail
{
public virtual OrderDetailPK PK { get; set; }
public virtual int PKComposite_Orderid { get; set; }
public virtual int PKComposite_RowNumber { get; set; }
public virtual String ProductName { get; set; }
public virtual int Qty { get; set; }
public virtual decimal Price { get; set; }
public virtual Order Order { get; set; }
}<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NhTest"
namespace="NhTest.Model">
<class name="OrderDetail">
<composite-id name="PK" class="OrderDetailPK">
<key-many-to-one name="OrderID" column="OrderID" class="Order"/>
<!--<key-property name="OrderID" column="OrderID"></key-property>-->
<key-property name="RowNumber" column="RowNumber"/>
</composite-id>
<property name="PKComposite_Orderid" not-null="true" formula="OrderID" />
<property name="PKComposite_RowNumber" not-null="true" formula="RowNumber" />
<property name="ProductName"/>
<property name="Price"/>
<property name="Qty"/>
<many-to-one name="Order" column="OrderID" class="Order" not-null="true" foreign-key="FK_OrderDetail">
</many-to-one>
</class>
</hibernate-mapping>调用方法
Order ord = new Order();
//ord.ID = 10;
ord.CustomerName = "张三";
ord.Created = DateTime.Now;
ord.Status = "ok";
ord.TotalAmt = 100;
ord.Items = new List<OrderDetail>();
ord.Items.Add(new OrderDetail()
{
PK=new OrderDetailPK(){
OrderID=9,
RowNumber=1,
},
PKComposite_Orderid=9,
PKComposite_RowNumber=1,
Price=34,
Qty=23,
ProductName="王老吉",
Order=ord
});
//session.save(ord);
...全文
相关推荐
NHibernate之旅
#### 使用环境本文档提到的学习环境中使用的是:- Microsoft Visual Studio 2008 SP1- SQL Server 2008 Express- NHibernate 2.1.1
NHibernate学习笔记
1"; ```#### 五、NHibernate与Oracle交互常见问题- **Clob/NClob插入问题**: - 在使用NHibernate与Oracle交互时,如果使用的是`NHibernate.Driver.OracleClientDriver
NHibernate-2.0.1.GA
在 NHibernate-2.0.1.GA 版本中,可能包含了一些重要的增强,例如对新的 .NET Framework 版本的支持,提高了性能,增加了新的查询语言特性,或者修复了影响稳定性的关键问题。
Nhibernate关联实例
同时,Nhibernate提供了懒加载(Lazy Loading)和立即加载(Eager Loading)策略,懒加载可以提高程序性能,但可能导致N+1查询问题,而立即加载则会一次性加载所有关联数据。
NHibernate 2.1.2源码
**关联映射**:一对多、多对一、一对一、多对多等关系的映射实现,以及懒加载和即时加载策略,这些都是在实际项目中经常遇到的问题。9.


