【发布时间】:2013-11-21 20:21:05
【问题描述】:
我在使用属性名称与列名称不匹配的对象指定 QueryOver order by 子句时遇到问题。
这是对象:-
public class ObjectInstance
{
public ObjectInstance()
{
IsActive = true;
}
public virtual bool IsActive { get; set; }
}
还有hibernate fluent映射:-
public class ObjectInstanceMap : ClassMap<ObjectInstance>
{
public ObjectInstanceMap()
{
Table("ObjectInstances");
Id(obj => obj.ObjectInstanceId).GeneratedBy.GuidComb();
Map(x => x.IsActive, "ObjectInstanceIsActive");
}
}
如您所见,数据库中的列名为 ObjectInstanceIsActive,但被映射到 ObjectInstance 对象的 IsActive 属性。尝试使用 QueryOver 获取 IList,如下所示:-
IList<ObjectInstance> result = this.Session.QueryOver<ObjectInstance>(() => objectInstance)
.UnderlyingCriteria.AddOrder(new Order("ObjectInstanceIsActive", true))
.List<ObjectInstance>();
抛出一个错误,指出 ObjectInstance 对象没有 ObjectInstanceIsActive 属性,这是正确的,它没有。
如果我将条件更改为:-
IList<ObjectInstance> result = this.Session.QueryOver<ObjectInstance>(() => objectInstance)
.UnderlyingCriteria.AddOrder(new Order("IsActive", true))
.List<ObjectInstance>();
然后 Hibernate 成功生成了一个 SQL 查询,但是它正在寻找一个名为 IsActive 的列,该列不存在并且出现错误。
我也尝试(单独)添加以下预测,但这没有帮助。
.Select(Projections.ProjectionList().Add(Projections.Property("IsActive"), "ObjectInstanceIsActive"))
.Select(Projections.ProjectionList().Add(Projections.Property("IsActive"), "ObjectInstanceIsActive"))
【问题讨论】:
标签: c# nhibernate fluent-nhibernate