2010-06-08 48 views
4

我有一個類,Item,它有很多Rates。他們被一個枚舉鍵入,RateTypeFluent NHibernate - 將組件/值類型對象的字典映射爲HasMany

public class Item 
{ 
    int Id {get;set;} 
    IDictionary<RateType, Rate> Rates {get;set;} 
    // some other stuff 
} 

public class Rate 
{ 
    RateType Type {get;set;} 
    decimal Amount {get;set;} 
    decimal Quantity {get;set;} 
} 

我正是如此重寫我的映射:

public void Override(FluentNHibernate.Automapping.AutoMapping<Item> mapping) 
{ 
    mapping.HasMany(x => x.Rates) 
     .AsMap(x => x.Type) 
     .KeyColumns.Add("Item_Id") 
     .Table("InvoiceItem_Rates") 
     .Component(x => x.Map(r => r.Amount)) 
     .Component(x => x.Map(r => r.Quantity)) 
     .Cascade.AllDeleteOrphan() 
     .Access.Property(); 
} 

這有兩個問題吧。

1)當我獲取一個項目時,Type被放置爲字典的關鍵字沒有問題。但是,它未被分配到Rate內的Type屬性。

2)我在表中預計三列InvoiceItem_RatesItem_IdTypeQuantityAmount。然而,Amount是可疑缺席。

爲什麼這些事情發生呢?我在做什麼錯?

回答

3

這在我看來並不完美,因爲枚舉鍵值實際上是作爲整數而不是字符串存儲的,但可能不是問題。 這裏的關鍵是,您不能有多次調用組件,因爲它將用任何東西覆蓋您以前的組件調用最後一個是。 調用Component()的正確方法如下:

 Id(x => x.Id); 
     HasMany(x => x.Rates) 
      .AsMap(x => x.Type) 
      .KeyColumn("Item_Id") 
      .Table("InvoiceItem_Rates") 
      .Component(x => 
          { 
           x.Map(r => r.Amount); 
           x.Map(r => r.Quantity); 
          }) 
      .Cascade.AllDeleteOrphan();    
+0

嗯,我收回數據,這是最重要的事情。但是我的'Type'屬性仍然沒有被返回。我試着將它添加到組件中,但是我收到了一個錯誤:「在收集映射中重複列」。但這完全是另一個問題!謝謝! – 2010-06-08 20:09:02

相關問題