ActiveRecord 映射

发布于 2024-08-28 16:45:30 字数 2940 浏览 14 评论 0原文

早上好,伙计们。

我对 NHibernate 生成的查询有疑问。我的映射如下所示:

public class Matricula
{
       [BelongsTo("IdTurma", NotNull=True)]
       public Turma {get;set;}      
}

public class Turma
{
      [BelongsTo("IdCurso", NotNull=True)]
      public Curso {get;set;}
}

public class Curso
{
       [PrimaryKey("IdCurso", Generator=PrimaryKeyType.Identity)]
       public int IdCurso{get;set;}
}

问题是: Nh 生成查询,其中左侧应位于内部。在 Matricula 和 Turma 之间,他们使内部成为内部,但在 Turma 和 Curso 之间,他们使外部成为左外部。有什么问题吗?怎么了?

我的查询:

SELECT  this_.IdMatricula as IdMatric1_122_14_, 
  this_.IdTurma as IdTurma122_14_, 
  this_.IdUsuario as IdUsuario122_14_, 
  turma3_.IdTurma as IdTurma25_0_, 
  turma3_.idTurmaStatus as idTurmaS2_25_0_,   
  turma3_.IdCurso as IdCurso25_0_,   
  curso4_.IdCurso as IdCurso31_1_, 
  curso4_.idStatus as idStatus31_1_, 
  curso4_.IdTipoCurso as IdTipoC10_31_1_, 
  curso4_.IdOrganization as IdOrgan11_31_1_,   
  statuscurs5_.idStatus as idStatus54_2_, 
  statuscurs5_.strStatus as strStatus54_2_, 
  tipocurso6_.strDescricao as strDescr2_125_3_, 
  padraocomu7_.strNmPadrao as strNmPad2_103_4_, 
  organizati8_.Id_Organization as Id1_87_5_, 
  organizati8_.strTitle as strTitle87_5_,
  cursoprese9_.IdCurso as IdCurso6_6_, 
  turmastatu10_.idTurmaStatus as idTurmaS1_91_7_,   
  usuario1_.IdUsuario as IdUsuario116_10_, 
  organizaca14_.idOrganizacao as idOrgani1_83_11_, 
  cargo15_.idCargo as idCargo7_12_,
  matriculas16_.idMatriculaStatus as idMatric1_15_13_
   FROM tracking.matriculas this_ 
 inner join cursos.turmas turma3_ on this_.IdTurma=turma3_.IdTurma 
 left outer join schemadbo.cursos curso4_ on turma3_.IdCurso=curso4_.IdCurso 
 left outer join schemadbo.status statuscurs5_ on curso4_.idStatus=statuscurs5_.idStatus 
 left outer join schemadbo.tipos tipocurso6_ on curso4_.IdTipoCurso=tipocurso6_.IdTipoCurso 
 left outer join schemadbo.PadraoComunicacao padraocomu7_ on curso4_.IdPadraoComunicacao=padraocomu7_.IdPadrao 
 left outer join schemadbo.lms_cp_organizations organizati8_ on curso4_.IdOrganization=organizati8_.Id_Organization 
 left outer join schemadbo.CursosPresenciais cursoprese9_ on curso4_.IdCurso=cursoprese9_.IdCurso 
 left outer join schemadbo.turmasstatus turmastatu10_ on turma3_.idTurmaStatus=turmastatu10_.idTurmaStatus 
 left outer join schemadbo.turmaspresenciais turmaprese11_ on turma3_.IdTurma=turmaprese11_.idTurma 
 inner join schemadbo.matriculasresumo matricular12_ on this_.IdMatricula=matricular12_.IdMatricula 
 inner join schemadbo.usuarios usuario1_ on this_.IdUsuario=usuario1_.IdUsuario 
 left outer join schemadbo.Organizacoes organizaca14_ on usuario1_.idOrganizacao=organizaca14_.idOrganizacao 
 left outer join schemadbo.cargos cargo15_ on usuario1_.idCargo=cargo15_.idCargo 
 inner join schemadbo.matriculasstatus matriculas16_ on this_.idMatriculaStatus=matriculas16_.idMatriculaStatus 
  WHERE this_.IdTurma = @p0

Good morning, guys.

I'm with a problem with the query that NHibernate generates. My mapping is like bellow:

public class Matricula
{
       [BelongsTo("IdTurma", NotNull=True)]
       public Turma {get;set;}      
}

public class Turma
{
      [BelongsTo("IdCurso", NotNull=True)]
      public Curso {get;set;}
}

public class Curso
{
       [PrimaryKey("IdCurso", Generator=PrimaryKeyType.Identity)]
       public int IdCurso{get;set;}
}

The problem is: The Nh generates the query with left where should be inner. Between Matricula and Turma they makes inner, but between Turma and Curso they makes left outer. What's problem? What's wrong?

My query:

SELECT  this_.IdMatricula as IdMatric1_122_14_, 
  this_.IdTurma as IdTurma122_14_, 
  this_.IdUsuario as IdUsuario122_14_, 
  turma3_.IdTurma as IdTurma25_0_, 
  turma3_.idTurmaStatus as idTurmaS2_25_0_,   
  turma3_.IdCurso as IdCurso25_0_,   
  curso4_.IdCurso as IdCurso31_1_, 
  curso4_.idStatus as idStatus31_1_, 
  curso4_.IdTipoCurso as IdTipoC10_31_1_, 
  curso4_.IdOrganization as IdOrgan11_31_1_,   
  statuscurs5_.idStatus as idStatus54_2_, 
  statuscurs5_.strStatus as strStatus54_2_, 
  tipocurso6_.strDescricao as strDescr2_125_3_, 
  padraocomu7_.strNmPadrao as strNmPad2_103_4_, 
  organizati8_.Id_Organization as Id1_87_5_, 
  organizati8_.strTitle as strTitle87_5_,
  cursoprese9_.IdCurso as IdCurso6_6_, 
  turmastatu10_.idTurmaStatus as idTurmaS1_91_7_,   
  usuario1_.IdUsuario as IdUsuario116_10_, 
  organizaca14_.idOrganizacao as idOrgani1_83_11_, 
  cargo15_.idCargo as idCargo7_12_,
  matriculas16_.idMatriculaStatus as idMatric1_15_13_
   FROM tracking.matriculas this_ 
 inner join cursos.turmas turma3_ on this_.IdTurma=turma3_.IdTurma 
 left outer join schemadbo.cursos curso4_ on turma3_.IdCurso=curso4_.IdCurso 
 left outer join schemadbo.status statuscurs5_ on curso4_.idStatus=statuscurs5_.idStatus 
 left outer join schemadbo.tipos tipocurso6_ on curso4_.IdTipoCurso=tipocurso6_.IdTipoCurso 
 left outer join schemadbo.PadraoComunicacao padraocomu7_ on curso4_.IdPadraoComunicacao=padraocomu7_.IdPadrao 
 left outer join schemadbo.lms_cp_organizations organizati8_ on curso4_.IdOrganization=organizati8_.Id_Organization 
 left outer join schemadbo.CursosPresenciais cursoprese9_ on curso4_.IdCurso=cursoprese9_.IdCurso 
 left outer join schemadbo.turmasstatus turmastatu10_ on turma3_.idTurmaStatus=turmastatu10_.idTurmaStatus 
 left outer join schemadbo.turmaspresenciais turmaprese11_ on turma3_.IdTurma=turmaprese11_.idTurma 
 inner join schemadbo.matriculasresumo matricular12_ on this_.IdMatricula=matricular12_.IdMatricula 
 inner join schemadbo.usuarios usuario1_ on this_.IdUsuario=usuario1_.IdUsuario 
 left outer join schemadbo.Organizacoes organizaca14_ on usuario1_.idOrganizacao=organizaca14_.idOrganizacao 
 left outer join schemadbo.cargos cargo15_ on usuario1_.idCargo=cargo15_.idCargo 
 inner join schemadbo.matriculasstatus matriculas16_ on this_.idMatriculaStatus=matriculas16_.idMatriculaStatus 
  WHERE this_.IdTurma = @p0

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

路弥 2024-09-04 16:45:30

我们最后遇到了类似的问题。为了提高性能,我们将 FetchEnum.Join 添加到 BelongsTo 属性中,这对我们来说很有效。

[BelongsTo("IdCurso", NotNull = true, Fetch=FetchEnum.Join)]

We ran into a similar issue at our end. To improve performance we added the FetchEnum.Join to the BelongsTo attribute and that did the trick for us.

[BelongsTo("IdCurso", NotNull = true, Fetch=FetchEnum.Join)]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文