当我尝试在NHibernate中查询子属性时,为什么会出现错误?

时间:2011-12-29 10:50:23

标签: sql nhibernate fluent

在查询具有子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和映射分成两个单独的程序集,如果这有任何区别的话。我配置映射所以:

.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的情况下为其他表执行此操作?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

或者,您可以使用LINQ而不是QueryOver:

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