Nhibernate 多次映射列

Nhibernate 多次映射列,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在流畅的hibernate映射中有一个相当奇怪的要求。我有一个表(A),它与另一个表(B)有复合外键关系。在表A的映射中,我希望从表B创建对象,并访问定义键的A的各个属性。有办法吗?如果我映射列两次,我似乎会得到索引超出范围的异常 我不能只是浏览B中的属性,因为表B中的行可能不存在。我痛苦地意识到,我正在处理的结构中有一些明显的气味。这就是那些处理遗留系统的人的命运。这是有可能的,只要稍加修改一下 我们将定义一个域,其中包含一个伪集合,我们将使用该集合检索单个相关元素(如果找到): publi

我在流畅的hibernate映射中有一个相当奇怪的要求。我有一个表(A),它与另一个表(B)有复合外键关系。在表A的映射中,我希望从表B创建对象,并访问定义键的A的各个属性。有办法吗?如果我映射列两次,我似乎会得到索引超出范围的异常

我不能只是浏览B中的属性,因为表B中的行可能不存在。我痛苦地意识到,我正在处理的结构中有一些明显的气味。这就是那些处理遗留系统的人的命运。

这是有可能的,只要稍加修改一下

我们将定义一个域,其中包含一个伪集合,我们将使用该集合检索单个相关元素(如果找到):

public class Foo
{
    public virtual BarKey BarKey { get; set; }
    public virtual Bar Bar { get { return Bars.SingleOrDefault(); } }
    protected virtual ICollection<Bar> Bars { get; set; }
}

public class Bar
{
    public virtual BarKey Id { get; set; }
}

//this class must override Equals and GetHashcode. Implementation not shown.
public class BarKey
{
    public virtual int X { get; set; }
    public virtual int Y { get; set; }
}
那里的
property ref
属性告诉NH将Bar中的那些列与Foo的
BarKey
属性相匹配,而不是它的Id。

这是有可能的,只要稍微修改一下

我们将定义一个域,其中包含一个伪集合,我们将使用该集合检索单个相关元素(如果找到):

public class Foo
{
    public virtual BarKey BarKey { get; set; }
    public virtual Bar Bar { get { return Bars.SingleOrDefault(); } }
    protected virtual ICollection<Bar> Bars { get; set; }
}

public class Bar
{
    public virtual BarKey Id { get; set; }
}

//this class must override Equals and GetHashcode. Implementation not shown.
public class BarKey
{
    public virtual int X { get; set; }
    public virtual int Y { get; set; }
}
那里的
property ref
属性告诉NH将Bar中的那些列与Foo的
BarKey
属性匹配,而不是它的Id