【问题标题】:Foreign key receiving two primary keys from the same table - Fluent Nhibernate外键接收来自同一个表的两个主键 - Fluent Nhibernate
【发布时间】:2017-04-04 15:26:52
【问题描述】:

我在尝试创建一个从一个表接收一个外键并从另一个表接收另一个外键的复合 ID 时遇到问题,但是第二个外键包含两个主键,这让我很头疼。有谁知道如何解决这个问题?

这是我的代码:

实体

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)
            ;
    }
}

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate


    【解决方案1】:

    我解决了它,它非常“简单”,我只需要在实体中引用每个表一次,在映射中我定义了来自同一个“KeyReference”上的同一个表的两个列。

    实体

        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)
                ;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-20
      • 2019-12-23
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2014-05-26
      • 2012-07-02
      • 2012-09-27
      相关资源
      最近更新 更多