代码之家  ›  专栏  ›  技术社区  ›  Colin Bowern

在NHibernate映射中使用Join复制项

  •  1
  • Colin Bowern  · 技术社区  · 16 年前

    我正在尝试检索各个细节行,而不必为父对象创建对象。我有一个映射,它将父表与细节连接起来以实现这一点:

    Table("UdfTemplate");
    Id(x => x.Id, "Template_Id");
    Map(x => x.FieldCode, "Field_Code");
    Map(x => x.ClientId, "Client_Id");
    
    Join("UdfFields", join =>
    {
        join.KeyColumn("Template_Id");
    
        join.Map(x => x.Name, "COLUMN_NAME");
        join.Map(x => x.Label, "DISPLAY_NAME");
        join.Map(x => x.IsRequired, "MANDATORY_FLAG")
            .CustomType<YesNoType>();
        join.Map(x => x.MaxLength, "DATA_LENGTH");
        join.Map(x => x.Scale, "DATA_SCALE");
        join.Map(x => x.Precision, "DATA_PRECISION");
    
        join.Map(x => x.MinValue, "MIN_VALUE");
        join.Map(x => x.MaxValue, "MAX_VALUE");
    });
    

    在NH中运行查询时使用:

    Session.CreateCriteria(typeof(UserDefinedField))
        .Add(Restrictions.Eq("FieldCode", code)).List<UserDefinedField>();
    

    我回到第一行三次,而不是它应该返回的三个单独的行。查看NH Profiler中的SQL跟踪,查询似乎是正确的。这个问题感觉像是在映射中,但我不确定如何解决这个过程。我要打开日志,看看我能找到什么,但我想我会张贴在这里,以防有经验的人知道我哪里出错。

    1 回复  |  直到 16 年前
        1
  •  0
  •   John Efford    14 年前

    在此处找到关于SetResults transformer的信息:

    http://www.coderanch.com/t/216546/ORM/java/Hibernate-returns-duplicate-results

    这使您的代码:

    Session.CreateCriteria(typeof(UserDefinedField))
        .Add(Restrictions.Eq("FieldCode", code))
        .SetResultTransformer(CriteriaSpecification.DistinctRootEntity)
        .List<UserDefinedField>();
    

    干杯