2012-10-12 44 views
3

我與當前情況下試圖創建一個使用舊的數據庫模式的映射掙扎的hasMany關係:FluentNhibernate - 複合鍵

我有一對是由複合鍵聯父/子類,我使用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

請爲'Comprobante'和'CuotaComprobante'類提供完整的映射。 – SHSE

回答

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