将Linq用于NHibernate时,将计算属性添加到类会引发NHibernate错误
我向类中添加了一些计算的只读属性,它现在抛出一个QueryException:无法解析属性 这是我的课(现在是假计算): 映射:将Linq用于NHibernate时,将计算属性添加到类会引发NHibernate错误,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,我向类中添加了一些计算的只读属性,它现在抛出一个QueryException:无法解析属性 这是我的课(现在是假计算): 映射: public class IncompleteApplicationMap : DealerBaseMap<IncompleteApplication> { public IncompleteApplicationMap() { Schema("Dealer"); Ta
public class IncompleteApplicationMap : DealerBaseMap<IncompleteApplication>
{
public IncompleteApplicationMap()
{
Schema("Dealer");
Table("XmlSerialization");
Map(app => app.Content);
}
}
_GetAll()返回一个IQueryable。当我在GetAll()之后添加一个.ToList()时,代码运行得很好(尽管我得到了selectn+1的情况)
谢谢你的帮助 您应该将两个只读属性映射到nhibernate,并在查询时使用公式提供它们的值。我对fluent nh不太了解,但您的属性的标准xml映射类似于:
<property name="DbaName" access="readonly" insert="false" update="false" type="String" formula="(SELECT 'Dba')" />
nHibernate正在生成一条sql语句以在服务器上执行。 数据库中不存在计算字段,因此无法在nHibernate查询中使用它们 您所能做的是对满足所有条件(计算字段除外)的对象执行查询,然后在.ToArray()之后对这些对象使用linq
data.GridDataItems = (from app in _Repository.GetAll()
select new GridData.GridDataItem()
{
ID = app.Id,
SubmittedDate = app.LastUpdated,
UserName = app.User.UserName,
}).ToArray().Where(i=> i.LegalBusinessName = app.LegalBusinessName && i.DbaName = app.DbaName);
这似乎是一个糟糕的处理方式。为什么我要我的查询来处理这个问题?似乎更好的做法是告诉NHibernate一个字段没有映射。不确定是NHibernate还是Linq把我弄到这里来。@Mike:据我所知,这是目前NH Linq提供商(尽管可能很不幸)能够干净地处理这件事的唯一方法。虽然不完全可取,但这将允许您在HQL/etc中查询这些计算字段,并解决linq提供程序的问题…Yikes。希望有人会插话。@Mike:我想我看不出这有什么大问题(除了一点重复);使用这种方法,客户端和服务器端的查询是相同的-这可能是一件令人满意的事情…让我们说公式,因为一个完全复杂的公式。。。现在,您需要数据库服务器执行根本不应该执行的操作。
<property name="DbaName" access="readonly" insert="false" update="false" type="String" formula="(SELECT 'Dba')" />
data.GridDataItems = (from app in _Repository.GetAll()
select new GridData.GridDataItem()
{
ID = app.Id,
SubmittedDate = app.LastUpdated,
UserName = app.User.UserName,
}).ToArray().Where(i=> i.LegalBusinessName = app.LegalBusinessName && i.DbaName = app.DbaName);