我向我的类添加了一些计算的只读属性,它现在抛出一个QueryException:无法解析属性。
这是我的班级(现在假计算):
public class IncompleteApplication : DealerBase
{
public virtual string Content { get; set; }
public virtual string LegalBusinessName
{
get
{
return "Leg";
}
}
public virtual string DbaName
{
get
{
return "Dba";
}
}
}
映射:
public class IncompleteApplicationMap : DealerBaseMap<IncompleteApplication>
{
public IncompleteApplicationMap()
{
Schema("Dealer");
Table("XmlSerialization");
Map(app => app.Content);
}
}
并致电代码:
data.GridDataItems = (from app in _Repository.GetAll()
select new GridData.GridDataItem()
{
ID = app.Id,
SubmittedDate = app.LastUpdated,
UserName = app.User.UserName,
LegalBusinessName = app.LegalBusinessName,
DbaName = app.DbaName
}).ToArray();
_Repository.GetAll()返回IQueryable。当我在GetAll()之后添加.ToList()时,代码运行得很好(尽管我得到了选择N + 1的情况)。
感谢您的帮助!
答案 0 :(得分:2)
您应该使用nhibernate映射两个只读属性,并使用公式在查询时提供它们的值。我不太熟悉nh,但是你的属性的标准xml映射看起来像:
<property name="DbaName" access="readonly" insert="false" update="false" type="String" formula="(SELECT 'Dba')" />
答案 1 :(得分:1)
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);