【问题标题】:NHibernate Linq - why does it use join when querying foreign key field?NHibernate Linq - 为什么在查询外键字段时使用连接?
【发布时间】:2010-08-09 19:47:13
【问题描述】:

我有一个有点像这样的对象模型:

public class Foo
{
  public int Id {get;set;}
  public string FooName {get;set;}
}

public class Bar
{
  public int Id {get;set;}
  public Foo Foo {get;set;}
}

这些以典型的一对多方式对应于数据库中的表。

使用 Linq to NHibernate 根据 Bars 的 Foo.Id 属性(应该简单地查询 Bars 表中的 FoodId 外键)查询 Bars 会生成带有连接的 SQL!

有人知道为什么会这样吗?这是标准的 NHibernate 行为吗?还是与 Linq 提供者有关?或者甚至是 FluentNHibernate(我用于映射)?

谢谢

大卫

【问题讨论】:

    标签: nhibernate join fluent-nhibernate linq-to-nhibernate


    【解决方案1】:

    这种行为是由 NHibernate.Linq 引起的(我相信它与将表达式转换为查询的 ICriteria 表示的方式有关)。据我所知,直接使用 Nhibernate.Linq 无法解决这个问题,但您可以通过直接使用 HQL 或 ICriteria 来实现您想要的结果。

    【讨论】:

    • Linq-to-NHibernate 的冠部有轻微的失去光泽。
    • 这仅适用于基于 Criteria API 的 old Linq 提供程序。新版本 (3.x) 使用 HQL,在这些情况下效率更高。
    • @Diego - 感谢您的信息,期待 NH 3.0 的发布版本 :)
    • 您已经可以开始使用 Alpha1(MS 会称之为 Beta2 或 RC)
    • @Diego - 不幸的是,我仍然不得不称它为“尚未准备好投入生产”;)
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2018-07-03
    • 2021-11-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    相关资源
    最近更新 更多