【问题标题】:fluent nhibernate parent child mapping流畅的nhibernate父子映射
【发布时间】: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().Where(x => x.Code == "X").Take(1).SingleOrDefault();如果这没有帮助,我想看看你的映射
  • 遗憾的是没有变化。我编辑了帖子并添加了我的映射代码。
  • 你不必调用 LazyLoad(),它是默认的。

标签: c# nhibernate fluent-nhibernate mapping nhibernate-mapping


【解决方案1】:

我使用提供的映射制作了一个简单的应用程序,但发现其中存在缺陷 在您使用的 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。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
相关资源
最近更新 更多