3

従来のデータベーススキーマを使用してマッピングを作成しようとしている現在のシナリオで苦労しています。

複合キーによってリンクされている親/子クラスのペアがあり、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(); 

だから私の質問は:それを達成する方法はありますか?私はマッピングの初心者であり、グーグルで回っても実際には何の助けにもならないので、私は本当にアイデアがありません。

前もって感謝します!

マウリシオ

4

1 に答える 1

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();
于 2012-10-16T12:43:19.583 に答える