【问题标题】:Why do I get an error when I'm trying to query a child property in NHibernate?当我尝试在 NHibernate 中查询子属性时,为什么会出现错误?
【发布时间】:2011-12-29 10:50:23
【问题描述】:

在查询具有子 POCO 属性对象的对象时,我似乎遇到了错误:

could not resolve property: PreferredLanguage.Name of: AcademyData.Entities.StudentsInformation

我的查询:

Session.QueryOver<StudentsInformation>().Where(x => x.Active == 1 && x.PreferredLanguage.Name == firstName).List()

如果我删除 x.PreferredLanguage.Name 条件,它会起作用,并且我会看到对象的正确 Name 值,但它不会让我将其用作查询。我做错了什么?

这是我的映射:

    References(x => x.PreferredLanguage).Column("PreferredLanguageID");

此外,我已将我的 POCO 和映射拆分为 2 个单独的程序集,如果这有什么不同的话。我这样配置映射:

.Mappings(x => x.FluentMappings.AddFromAssemblyOf<AcademyData.Dummy>().AddFromAssemblyOf<data.core.Dummy>())

忽略假人,正在用它来测试一些东西。

编辑:我已经使用来自同一程序集的实体对其进行了测试,但问题仍然存在。 编辑:

我找到了解决问题的方法:

return SessionManager.Session.QueryOver<StudentsInformation>().JoinQueryOver<PersonBase>(s => s.Person).Where(p => p.FirstName == firstName).List();

这是正确的做法吗,还是我仍然可以在没有 JoinQueryOver 的情况下为不同的表执行此操作?

【问题讨论】:

    标签: sql nhibernate fluent


    【解决方案1】:

    或者,您可以使用 LINQ 代替 QueryOver:

    return Session.Query<StudentsInformation>()
                  .Where(x => x.Active == 1 && x.PreferredLanguage.Name == firstName)
                  .ToList()
    

    【讨论】:

      【解决方案2】:

      如果您希望通过该子实体进行查询,则必须加入该子实体。这是正确的做法。如果您愿意,也可以使用JoinAlias

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        • 2020-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多