2014-12-08 3 views
0

하나의 테이블에서 하나의 외래 키를 받고 다른 테이블에서 다른 외래 키를 받는데 문제가 있습니다. 그러나이 두 번째 외래 키는 두 개의 외래 키 기본 키 및이 내 큰 두통을 해결할 수 있습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까? 여기 동일한 테이블에서 두 개의 기본 키를받는 외래 키 - Fluent Nhibernate

내 코드입니다 :

법인

public class GrupoArquivo 
{ 
    public GrupoArquivo() {} 

    public GrupoArquivo(ArquivoRetorno arquivoRetorno, GrupoModulo grupo, GrupoModulo modulo) : this() 
    { 
     Arquivo = arquivoRetorno; 
     Grupo = grupo; 
     Modulo = modulo; 
    } 

    public virtual ArquivoRetorno Arquivo { get; protected set; } 
    public virtual GrupoModulo Grupo { get; protected set; } 
    public virtual GrupoModulo Modulo { get; protected set; } 

    public override bool Equals(object obj) 
    { 
     var grupoArquivo = (obj as GrupoArquivo); 

     if (grupoArquivo != null) 
     { 
      if (ReferenceEquals(obj, this)) 
       return true; 

      var thisHash = GetHashCode(); 
      var otherHash = grupoArquivo.GetHashCode(); 

      return thisHash.Equals(otherHash); 
     } 
     return false; 
    } 

    public override int GetHashCode() 
    { 
     return string.Concat("{0}|{1}|{2}", Arquivo, Grupo, Modulo).GetHashCode(); 
    } 
} 

public class GrupoArquivoMap : ClassMap<GrupoArquivo> 
{ 
    public GrupoArquivoMap() 
    { 
     Schema(Const.SCHEMA); 
     Table(Const.TB_EMAIL_GRUPO_ARQUIVO); 

     CompositeId() 
      .KeyReference(x => x.Arquivo, Const.ID_ARQUIVO) 
      .KeyReference(x => x.Grupo, Const.ID_GRUPO) 
      .KeyReference(x => x.Modulo, Const.ID_MODULO) 
      ; 
    } 
} 

답변

1

나는 그것을 해결하고 아주 "간단한"이었다, 나는 한 번만 각 테이블을 참조했다 매핑 엔티티와 매핑에서 동일한 "KeyReference"에있는 동일한 테이블에서 오는 두 개의 collumn을 정의했습니다.

법인

public GrupoArquivo() {} 

    public GrupoArquivo(ArquivoRetorno arquivoRetorno, GrupoModulo grupoModulo) : this() 
    { 
     Arquivo = arquivoRetorno; 
     GrupoModulo = grupoModulo; 
    } 

    public virtual ArquivoRetorno Arquivo { get; protected set; } 
    public virtual GrupoModulo GrupoModulo { get; protected set; } 

    public override bool Equals(object obj) 
    { 
     var grupoArquivo = (obj as GrupoArquivo); 

     if (grupoArquivo != null) 
     { 
      if (ReferenceEquals(obj, this)) 
       return true; 

      var thisHash = GetHashCode(); 
      var otherHash = grupoArquivo.GetHashCode(); 

      return thisHash.Equals(otherHash); 
     } 
     return false; 
    } 

    public override int GetHashCode() 
    { 
     return string.Concat("{0}|{1}|{2}", Arquivo, GrupoModulo).GetHashCode(); 
    } 

매핑

public class GrupoArquivoMap : ClassMap<GrupoArquivo> 
{ 
    public GrupoArquivoMap() 
    { 
     Schema(Const.SCHEMA); 
     Table(Const.TB_EMAIL_GRUPO_ARQUIVO); 

     CompositeId() 
      .KeyReference(x => x.Arquivo, Const.ID_ARQUIVO) 
      .KeyReference(x => x.GrupoModulo, Const.ID_GRUPO, Const.ID_MODULO) 
      ; 
    } 
}