NHibernate & Linq - “无法解析属性”
Posted
技术标签:
【中文标题】NHibernate & Linq - “无法解析属性”【英文标题】:NHibernate & Linq - "could not resolve property" 【发布时间】:2010-12-08 09:45:34 【问题描述】:映射文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="DaVinci"
namespace="DaVinci.Domain">
<class name="Waehrungskurs" table="WAEHRUNGSKURSE">
<id name="Id" column="ID">
<generator class="native" />
</id>
<property name="ISOCode" column="ISO" />
<property name="AktuellerKurs" column="AKTKURS" />
<property name="Kursart" column="KIND_OF_KURS" />
<property name="WährungstabkurseId" column="WAEHRUNGSTABKURSE_ID" />
<property name="Departure" column="DEPARTURE" />
<property name="Datum" column="DATE_TIME" />
<property name="RealerKurs" column="REALKURS" />
<property name="Gültig" column="GUELTIG" />
</class>
</hibernate-mapping>
Domain.cs: ... 公共虚拟双 AktuellerKurs 得到;放; 公共虚拟日期时间基准获取;设置; 公共虚拟日期时间 Gültig 获取;放; 公共虚拟 int Id 获取;放; 公共虚拟字符串 ISOCode 获取;放; 公共虚拟 int Kursart 获取;放; 公共虚拟双 RealerKurs 得到;放; 公共虚拟 int WährungstabkurseId 获取;放; ...
当我调用以下函数时,我得到一个 NHibernate.QueryException(“无法解析属性:Datum.Date:DaVinci.Domain.Waehrungskurs”):
public static Domain.Waehrungskurs GetByISOAndKursartAndDate(string isocode, int kursart, DateTime datum)
return (from WK in session.Linq<DaVinci.Domain.Waehrungskurs>()
where WK.ISOCode == isocode
&&
WK.Kursart == kursart
&&
WK.Datum.Date == datum.Date
orderby WK.Id descending
select WK).First();
当我删除搜索条件“WK.Datum.Date == datum.Date”时,该函数工作正常。
任何想法为什么找不到该属性?
【问题讨论】:
【参考方案1】:没有找到日期时间的日期属性,因为它没有实现。请为this class写补丁
【讨论】:
这是一个非常明显的遗漏,因为这些函数可以通过调用框架中的函数来轻松实现。我没有抱怨,我已经为该文件的每个函数编写了一个补丁,所有的文本内容,加上我添加了 DayOfWeek、DayOfYear 和 Date。如何提交? @Gareth Farrington:太好了!也许您可以将其作为颠覆补丁提交给 NHibernate.Linq 的作者? 我刚刚更新了我们项目的所有库(Nhibernate/ActiveRecord),我看到 Linq 现在是 NHibernate 核心的一部分。我为其编写补丁的文件甚至不存在于新代码中。使用新代码进行的测试表明此问题尚未修复。来自 Select 子句的访问有效,但来自 GroupBy 的访问无效。我们决定只修改我们的表格。我们正在为需要对其进行分组/where 子句的日期添加日/月/年整数列。它只是不那么痛苦,可能更高效。我不确定我应该如何从这里开始。 NHcorelinq != NHcontrib linq 主干中的 linq 提供程序是一个全新的 linq 提供程序,与 NHcontrib 中的 linq 提供程序不同。老的provider稍微稳定了一点,最基本的功能都实现了。新的 linq 提供者将是一个完整的 linq 提供者,并将最终在 HQL 中实现所有内容。旧提供程序基于标准。在新的 linqprovider 完成之前,我还会对 NHcontrib 提供程序使用解决方法。 我简直不敢相信......为什么他们会错过这么有用的东西?【参考方案2】:该属性不存在。
尝试替换:WK.Datum.Date == datum.Date
与
WK.Datum == datum.Date
【讨论】:
以上是关于NHibernate & Linq - “无法解析属性”的主要内容,如果未能解决你的问题,请参考以下文章
不支持 linq to nhibernate compareto
如果我使用类似 NHibernate 的 ORM,为啥需要 LINQ?