流畅的nhibernate父子映射
Posted
技术标签:
【中文标题】流畅的nhibernate父子映射【英文标题】:fluent nhibernate parent child mapping 【发布时间】:2013-11-14 21:46:01 【问题描述】:当我尝试映射嵌套的父子关系时,我遇到了 FluentNHibernate 问题。 当我尝试这样的查询时:
var courier = session.Query<Courier>().FirstOrDefault(x => x.Code == "X");
CourierPrice 中的 DistributionCenter 属性包含所有可能的快递员的 CourierPrice 实体,而不仅仅是 X。是否可以在不修改映射的情况下更改此行为?
public class Courier
public Courier()
Courierprices = new List<Courierprice>();
public virtual System.Guid Guid get; set;
public virtual string Code get; set;
public virtual IList<Courierprice> Courierprices get; set;
public class Courierprice
public virtual System.Guid Guid get; set;
public virtual Courier Courier get; set;
public virtual Distributioncenter Distributioncenter get; set;
public virtual decimal? Price get; set;
public class Distributioncenter
public Distributioncenter()
Postcodes = new List<Postcode>();
public virtual System.Guid Guid get; set;
public virtual string Code get; set;
public virtual IList<Courierprice> Courierprices get; set;
映射:
public CourierMap()
Table("Couriers");
LazyLoad();
Id(x => x.Guid).GeneratedBy.Assigned().Column("Guid");
Map(x => x.Code).Column("Code");
HasMany(x => x.Courierprices).KeyColumn("Courier");
public CourierpriceMap()
Table("CourierPrices");
LazyLoad();
Id(x => x.Guid).GeneratedBy.Assigned().Column("Guid");
References(x => x.Courier).Column("Courier");
References(x => x.Distributioncenter).Column("DistributionCenter");
Map(x => x.Price).Column("Price");
public DistributioncenterMap()
Table("DistributionCenters");
LazyLoad();
Id(x => x.Guid).GeneratedBy.Assigned().Column("Guid");
Map(x => x.Code).Column("Code");
HasMany(x => x.Courierprices).KeyColumn("DistributionCenter");
【问题讨论】:
如果你尝试过 session.QueryOver我使用提供的映射制作了一个简单的应用程序,但发现其中存在缺陷 在您使用的 DistributioncenterMap 中
Id(x => x.Guid).GeneratedBy.Assigned().Column("Guid");
而不是
Id(x => x.Guid).GeneratedBy.Guid().Column("Guid");
我在测试运行中添加了一些行,其中两个是 Code == "X",它让我第一个没有问题。试试看
【讨论】:
assigned
是用于 guid 的合理生成器,前提是您正在实际使用 Guid.NewGuid()
自己分配它们。【参考方案2】:
查询返回正确的结果。 Distributioncenter.Courierprices 集合应包含链接到 Distributioncenter 的所有 Courierprices。
【讨论】:
是的,但是我的意图是让 Distributioncenter.Courierprices 集合仅包含 Courier“X”的 CourierPrices。以上是关于流畅的nhibernate父子映射的主要内容,如果未能解决你的问题,请参考以下文章
流畅的 NHibernate HASMANY 映射,无需参考