我正在努力尝试使用旧数据库架构创建映射的当前场景:
我有一对由复合键链接的父/子类,我正在使用FluentNHibernate来创建映射和它们之间的关联。以下是课程:
/*Parent Class*/
public class Comprobante : Model<Comprobante>
{
public virtual IList<CuotaComprobante> Cuotas { get; protected set; }
public virtual string NumeroComprobante { get; protected set; }
public virtual string Tipo { get; protected set; }
public Comprobante(){ }
}
/*Child Class*/
public class CuotaComprobante : Model<CuotaComprobante>
{
public virtual Comprobante Comprobante { get; protected set; }
public virtual string Estado { get; protected set; }
public virtual DateTime FechaVencimiento { get; protected set; }
/*!!!Want to get rid of this two properties in the child class*/
public virtual string NumeroComprobante { get; protected set; }
public virtual string Tipo { get; protected set; }
public CuotaComprobante(){ }
}
这是数据库架构:
Comprobante Table (gva12)
- ID_GVA12
- N_COMP (NumeroComprobante property in Comprobante class)
- T_COMP (Tipo property in Comprobante class)
CuotaComprobante Table (gva46)
- ID_GVA46
- N_COMP
- T_COMP
因此,正如您所看到的,N_COMP和T_COMP字段是组合键的一部分(ID_GVA12和ID_GVA46都不用于数据库中的关系)。我已经尝试使用HasMany关系(如下面的代码所示),但它只使用T_COMP字段执行连接,这给了我比预期更多的结果。您可能已经注意到,我刚刚在子类中创建了属性“NumeroComprobante”和“Tipo”用于映射,但我真的想摆脱它们,因为它是我在父类中已有的信息,或者替换它们参考Comprobante类。
HasMany(x => x.Cuotas)
.KeyColumn("N_COMP").PropertyRef("NumeroComprobante")
.KeyColumn("T_COMP").PropertyRef("Tipo")
.Inverse();
所以我的问题是:有没有办法来实现这个目标?我真的没有想法,因为我是一个有点映射的新手,谷歌搜索并没有真正提供任何帮助。
提前致谢!
毛
答案 0 :(得分:3)
试
Component(x => x.ComponentContainingNumeroAndTipo, c =>
{
c.Map(x => x.NumeroComprobante, "N_COMP");
c.Map(x => x.Tipo, "T_COMP");
});
HasMany(x => x.Cuotas)
.KeyColumns.Add("N_COMP", "T_COMP")
.PropertyRef("ComponentContainingNumeroAndTipo")
.Inverse();