2012-03-02 4 views
0

나는 다음과 같은 모델이 있습니다잘못된 인덱스 4 = 4

public class ExchangeRate 
{ 
    [Key, Column(Order = 1)] 
    public virtual int JobId { get; set; } 

    [Key, Column(Order = 2), MaxLength(3)] 
    public virtual Currency Source { get; set; } 

    [Key, Column(Order = 3), MaxLength(3)] 
    public virtual Currency Target { get; set; } 

    public virtual decimal Rate { get; set; } 

    public virtual Job Job { get; set; } 

    public override bool Equals(object obj) 
    { 
     if (obj == null) 
      return false; 

     var t = obj as ExchangeRate; 

     if (t == null) 
      return false; 

     if (this.Job == t.Job & this.Source == t.Source && this.Target == t.Target) 
      return true; 

     return false; 
    } 

    public override int GetHashCode() 
    { 
     return (this.JobId + "|" + this.Source + "|" + this.Target).GetHashCode(); 
    } 

을 나는 다음과 같은 자동 매핑 재정이 있습니다

public void Override(AutoMapping<ExchangeRate> mapping) 
{ 
    mapping.Map(x => x.Source).CustomType<GenericEnumMapper<Currency>>(); 
    mapping.Map(x => x.Target).CustomType<GenericEnumMapper<Currency>>(); 

    // Define the composite key 
    mapping.CompositeId() 
     .KeyProperty(e => e.JobId, "JobId") 
     .KeyProperty(e => e.Source) 
     .KeyProperty(e => e.Target); 
} 

내가로 내 보낸 다음 내 보낸 매핑 파일을

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class xmlns="urn:nhibernate-mapping-2.2" name="JFS.Data.Model.ExchangeRate, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="ExchangeRates"> 
    <composite-id> 
     <key-property name="JobId" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="JobId" /> 
     </key-property> 
     <key-property name="Source" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880"> 
     <column name="Source" /> 
     </key-property> 
     <key-property name="Target" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880"> 
     <column name="Target" /> 
     </key-property> 
    </composite-id> 
    <property name="Source" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880"> 
     <column name="Source" /> 
    </property> 
    <property name="Target" type="FluentNHibernate.Mapping.GenericEnumMapper`1[[JFS.Data.Currency, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], FluentNHibernate, Version=1.3.0.717, Culture=neutral, PublicKeyToken=8aa435e3cb308880"> 
     <column name="Target" /> 
    </property> 
    <property name="Rate" type="System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Rate" /> 
    </property> 
    <many-to-one class="JFS.Data.Model.Job, JFS.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Job"> 
     <column name="JobId" /> 
    </many-to-one> 
    </class> 
</hibernate-mapping> 

내가 m 내 머리를 찢어되었습니다 진단 문제를 시도하고 도움 오늘이 문제를 해결하기 위해 노력하고 있습니다. 많은 게시물을 읽었으며 어떤 솔루션도 성공적으로 적용 할 수 없었습니다. 나는 NHibernate에 상대적으로 새롭고 더 많이 사용하기를 열망한다.하지만 지금까지는 프로젝트를 시작하고 실행하기위한 꽤 가파른 학습 곡선을 보였다. 오류에 대한 해결책 및 설명에 대한 조언은 감사하겠습니다.

답변

1

KeyPropery 대신 KeyReference을 기본 키의 일부인 많은 관계에 사용하십시오.

.KeyReference(e => e.Source) 
.KeyReference(e => e.Target); 
+0

감사합니다. 예외를 극복 한 것으로 보입니다. 이제 새로운 예외가 생겼습니다. 아마도 새로운 질문으로 게시해야합니까? ExchangeRates 테이블의 연관은 매핑되지 않은 클래스를 나타냅니다. JFS.Data.Currency – ProNotion

+0

What는'GenericEnumMapper '입니다. 'Currency'는'Source'와'Target'에 사용할 열거 형입니까? –

+0

예 통화는 소스 및 대상에 대한 열거 형입니다. GenericEnumMapper를 사용하면 데이터베이스의 정수 표현 대신 열거 형의 문자열 값을 저장할 수 있습니다. – ProNotion