2010-11-10 68 views
3

我使用IQueryable <>構建批處理查詢。NHibernate映射到使用公共屬性的實體

我已成功地使用視圖獲取信息,以便IQueryable <>可以找到它,但在這種情況下,我無法確定如何映射視圖,因爲它取決於屬性而不是實體的ID。

說我有這個實體和映射:

public class Calculation 
{ 
    public virtual int Id { get; set; } 
    public virtual Organisation Organisation { get; set; } 
    public virtual Charge Charge { get; set; } 
    public virtual TransactionTotal TransactionTotal { get; set; } 
} 

public class CalculationMap : ClassMap<Calculation> 
{ 
    public CalculationMap() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     References(x => x.Organisation).Not.Nullable().UniqueKey("OC"); 
     References(x => x.Charge).Not.Nullable().UniqueKey("OC"); 
    } 

這是我需要在那裏類:我使用一個觀點給我每個組織和充電總量:

public class TransactionTotal 
{ 
    public virtual int Id { get; set; } 
    public virtual Organisation Organisation { get; set; } 
    public virtual Charge Charge { get; set; } 
    public virtual decimal Amount { get; set; }   
} 

public class TransactionTotalMap : ClassMap<TransactionTotal> 
{ 
    public TransactionTotalMap() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     Table("TransactionTotalsView"); 
     References(x => x.Charge).Not.Nullable(); 
     References(x => x.Organisation).Not.Nullable(); 
     Map(x => x.Amount).Precision(15).Scale(2).Not.Nullable(); 
    } 
} 

其他地方我已經使用了views我已經成功地使用了像HasOne(x => x.TransactionTotal);這樣的映射,但在這種情況下,我需要告訴Nhibernate使用Organization和Charge屬性作爲鍵。

這甚至可能嗎?如果是這樣,我如何將TransactionTotal類映射到Calculation類?

編輯:我已經在TransactionTotalMap使用CompositeId的建議由@大衛:

CompositeId().KeyProperty(x => x.Organisation.Id).KeyProperty(x => x.Charge.Id); 

我仍然停留在放什麼在CalculationMap雖然。

回答

1

在您的映射中使用CompositeId()方法

+0

謝謝。你知道我應該把什麼放在CalculationMap中以符合這個嗎? – stuartd 2010-11-10 16:38:02

+0

現在是什麼? – 2010-11-10 16:58:27

+0

還沒有.. :( – stuartd 2010-11-11 12:03:56