NHibernate之旅(11):探索多对多关系及其关联查询

本节内容

多对多关系引入多对多映射关系多对多关联查询结语多对多关系引入

让我们再次回顾在第二篇中建立的数据模型:

在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的“外键关系”或者称作“父子关系”、“一对多关系”和关联查询,这一篇以Order为中心,分析Order和Product之间的关系,直接看下面一幅图的两张表:

上面两张表关系表达的意思是:Order有多个Products,Product属于多个Orders。我们称Order和Product是多对多关系,这一篇我们来深入讨论在NHibernate如何映射多对多关系及其多对多关联查询。

多对多映射关系1.Order有多个Products

有了上两篇的基础,现在直奔主题,建立关系。大家可以把这篇的代码作为模板,以后在工作中参考。

修改Order.cs类代码如下:

namespace DomainModel.Entities{public class Order{public virtual int OrderId { get; set; }public virtual DateTime OrderDate { get; set; }Customer { get; set; }//多对多关系:Order有多个Productspublic virtual IList<Product> Products { get; set; }}}

修改Order.hbm.xml映射文件如下:

"1.0" encoding="utf-8" ?><"urn:nhibernate-mapping-2.2""DomainModel"><"DomainModel.Entities.Order,DomainModel" table="`Order`" ><""Int32" unsaved-value="0"><"native" /></id><""DateTime" not-null="true" /><!–多对一关系:Orders属于一个Customer–><""true"class="DomainModel.Entities.Customer,DomainModel"foreign-key="FK_CustomerOrders" /><!–多对多关系:Order有多个Products–><""OrderProduct"><"`Order`" foreign-key="FK_OrderProducts"/><"Product"class ="DomainModel.Entities.Product,DomainModel"foreign-key="FK_ProductOrders"/></bag> </class></hibernate-mapping>

在多对多关系中,其两方都使用Bag集合和many-to-many元素。看看上面各个属性和one-to-many,many-to-one属性差不多。

2.Product属于多个Orders

在项目DomainModel层的Entities文件夹中新建Product.cs类,编写代码如下:

namespace DomainModel.Entities{public class Product{public virtual int ProductId { get; set; }public virtual string Name { get; set; }public virtual float Cost { get; set; }//多对多关系:Product属于多个Orderspublic virtual IList<Order> Orders { get; set; }}}

在项目DomainModel层的Mappings文件夹中新建Product.hbm.xml映射文件,编写代码如下:

"1.0" encoding="utf-8" ?><"urn:nhibernate-mapping-2.2""DomainModel"> <"DomainModel.Entities.Product,DomainModel" table="Product"><""Int32" unsaved-value="0"><"native"/></id><"""50"/><""float" not-null="true"/><!–多对多关系:Product属于多个Orders–><""OrderProduct"><"Product" foreign-key="FK_ProductOrders"/><"`Order`"class="DomainModel.Entities.Order,DomainModel"foreign-key="FK_OrderProducts"/></bag></class></hibernate-mapping>多对多关联查询那里面非常漂亮,个个观景区都能看到奇形怪状的岩石。

NHibernate之旅(11):探索多对多关系及其关联查询

相关文章:

你感兴趣的文章:

标签云: