gpt4 book ai didi

c# - NHibernate 和 C# : error using nested properties with Criteria

转载 作者:行者123 更新时间:2023-11-30 12:42:30 25 4
gpt4 key购买 nike

该场景是一个使用 NHibernate 与 SQL Server 数据库交互的 MVC.NET 应用程序。

每个带有 Criteria 的 NHibernate 查询都工作正常,除了我添加的最后一个,它给出了以下错误:

could not resolve property: Reading.Truck.Company.CompanyId of: ADO.Alarms

相关代码如下:

session = NHibernateSessionManager.Instance.GetSession();
ICriteria criteria = session.CreateCriteria(typeof(Alarms));
criteria.Add(Expression.Eq("Reading.Truck.Company.CompanyId", companyId));

alarmsList = criteria.List<Alarms>();

嵌套属性在相关类文件中定义如下:Alarms.cs

private AlarmsReading _Reading;  
public AlarmsReading Reading
{
get { return _Reading; }
set { _Reading= value; }
}

这些属性在映射文件中定义如下:

Alarms.hbm.xml

<hibernate-mapping  ...>
<class name="Alarms" table="Alarms" lazy="false">
<cache usage="read-write"/>
...
<many-to-one name="Reading" class="AlarmsReading">
<column name="Reading_Id" not-null="true"/>
</many-to-one>
...
</class>
</hibernate-mapping>

所有其他条件查询,以及其他嵌套属性,以相同方式定义,都可以正常工作。

奇怪的是如果我使用正常的 IQuery使用 createQuery 方法的语法,一切顺利;即:

session = NHibernateSessionManager.Instance.GetSession();
IQuery query = null;
query = session.CreateQuery("FROM Alarms al WHERE Reading.Truck.Company.CompanyId = (:companyId) ");
query.SetParameter("companyId", companyId);
alarmsList = query.List<Alarms>();

我也找到了这个 similar question ,而且我知道有多种解决方法,但我正在寻找造成这种不当行为的原因。

任何帮助将不胜感激。提前谢谢你。

最佳答案

好的。我已经了解如何正确使用 Criteria,阅读 this post 的答案, 以及以下 this example在 NHibernate 官方网站上。

Criteria 的点符号似乎只适用于当前对象的组件(及其属性:即 Reading.ReadingId)。

如果我们想要获得更深层次的属性,我们将使用 Associations .

所以这段代码可以很好地完成我的任务:

session = NHibernateSessionManager.Instance.GetSession();
ICriteria criteria = session.CreateCriteria(typeof(Alarms));
criteria.CreateCriteria("Reading").CreateCriteria("Truck")
.Add(Expression.Eq("Company.CompanyId", companyId));

alarmsList = criteria.List<Alarms>();

关于c# - NHibernate 和 C# : error using nested properties with Criteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com