我有A
和B
。 A
可以有多个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;}
}
答案 0 :(得分:0)
您应在映射中使用PropertyRef
来指定对非id属性的引用:
HasMany(x=> x.Items)
.KeyColumn("Code")
.ProprertyRef("Code"); // or .PropertyRef(x => x.Code) (not sure if it's available)