在一对多关系中查询时联接列不正确

时间:2020-11-06 09:36:59

标签: c# nhibernate fluent-nhibernate

我有ABA可以有多个B,但它们与Code的{​​{1}}列相关。 从技术上讲,这是多对多的关系(A也可能有许多B,但我不想映射它,因为它与我正在研究的问题无关。)它是传统的,所以我无法控制架构。

问题在于,默认情况下,nhibernate产生以下联接,这是不正确的。

A

问题是。如何指定联接应使用SELECT * FROM A AS a JOIN B AS b ON a.Id=b.ACode; 表中的Code而不是Id

实体:

A

映射:

public class A
{
    public int Id {get;set;}
    public string Code {get;set;} 
    public ICollection<B> Items {get;set;}
}

public class B
{
    public int Id {get;set;}
    public string ACode {get;set;}
}

1 个答案:

答案 0 :(得分:0)

您应在映射中使用PropertyRef来指定对非id属性的引用:

HasMany(x=> x.Items)
  .KeyColumn("Code")
  .ProprertyRef("Code"); // or .PropertyRef(x => x.Code) (not sure if it's available)