我遇到了一定的映射问题。比方说,我有三个评估,所有获得过一个基地Assessment
:如何使用NHibernate将派生属性映射到基类上?
public abstract class Assessment
{
public abstract int DamageCostTotal { get; set; }
}
public class IndividualAssessment
{
public virtual int DamageCostHouse { get; set; }
public virtual int DamageCostCar { get; set; }
public virtual int DamageCostBelongings { get; set; }
public override DamageCostTotal
{
get { return DamageCostHouse + DamageCostCar + DamageCostBelongings; }
}
}
public class BusinessAssessment
{
public virtual int DamageCostBuilding { get; set; }
public virtual int DamageCostGoods { get; set; }
public virtual int DamageCostOther { get; set; }
public override DamageCostTotal
{
get { return DamageCostBuilding + DamageCostGoods + DamageCostOther; }
}
}
public class InfrastructureAssessment
{
public virtual int DamageCostStructure { get; set; }
public virtual int DamageCostEstimatedRepair { get; set; }
public override DamageCostTotal
{
get { return DamageCostStructure + DamageCostEstimatedRepair; }
}
}
换句话说,这三个评估类型,IndividualAssessment
,BusinessAssessment
和InfrastructureAssessment
,都有特定的损害成本,但它们都实现了基类'DamageTotalCost
为了得到一个评估的总伤害成本。
在我流利的NHibernate映射,我映射到各DamageCostTotal对于每个具体的评估:
Session.Query<IndividualAssessment>().OrderBy(x => x.DamageCostTotal);
Session.Query<BusinessAssessment>().OrderBy(x => x.DamageCostTotal);
Session.Query<InfrastructureAssessment>().OrderBy(x => x.DamageCostTotal);
但是当我尝试:
// individual assessment
Map(x => x.DamageCostTotal)
.Access.Readonly()
.Formula("DamageCostHouse + DamageCostCar + DamageCostBelongings");
// the other two are mapped the same way, just with a different formula
当我查询过具体的评估类型的这个伟大的工程查询基础评估类型:
Session.Query<Assessment>().OrderBy(x => x.DamageCostTotal);
它生成错误的SQL(清理了一下,方便阅读):
SELECT ...
DamageCostHouse + DamageCostCar + DamageCostBelongings as formula0_0_,
DamageCostBuilding + DamageCostGoods + DamageCostOther as formula1_0_,
DamageCostStructure + DamageCostEstimatedRepair as formula2_0_,
FROM [Assessment] this_
ORDER BY DamageCostStructure + DamageCostEstimatedRepair
正如你所看到的,它是正确创建的公式,但是当它被InfrastructureAssessment
性质,而不是公式做了ORDER BY
,它只有单吧。有谁知道如何映射基地DamageCostTotal
,以便这个查询将返回正确的结果?
谢谢,我试了一下,它的伟大工程。 – 2010-11-16 04:27:25