2010-06-08 5 views
4

Rates이있는 Item 클래스가 있습니다. 열거 형에 의해 키가 있습니다 (RateType). 내가 thusly 히 내 매핑을 무시하고Fluent 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_Rates (Item_Id, Type, QuantityAmount. 그러나, 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' 속성은 여전히 ​​반환되지 않습니다. 구성 요소에 추가하려고했지만 "컬렉션의 매핑에서 열을 반복했습니다"라는 오류가 발생했습니다. 그러나 그것은 또 다른 문제입니다! 감사! –

관련 문제