我在尝试使用旧版数据库架构创建映射的当前方案中挣扎:

我有一对通过复合键链接的父/子类,并且我正在使用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();


所以我的问题是:有没有办法做到这一点?我真的是个主意,因为我是一个映射的新手,而谷歌搜索并没有真正提供任何帮助。

提前致谢!

毛里西奥

最佳答案

尝试

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();

关于c# - FluentNhibernate-具有复合键的HasMany关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12868645/

10-11 15:43