У меня проблемы с определенным отображением. Допустим, у меня есть три оценки, которые все выводятся из базы Assessment
:
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
, чтобы получить общий ущерб одной оценки стоимость.
В моих отображениях Fluent NHibernate я отображал каждый 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<IndividualAssessment>().OrderBy(x => x.DamageCostTotal);
Session.Query<BusinessAssessment>().OrderBy(x => x.DamageCostTotal);
Session.Query<InfrastructureAssessment>().OrderBy(x => x.DamageCostTotal);
Но когда я пытаюсь запросить базовый тип оценки:
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
Как видите, он правильно создает формулы, но когда он делает ORDER BY
, он упорядочивает его только по свойствам InfrastructureAssessment
, а не по формулам. Кто-нибудь знает, как сопоставить базу DamageCostTotal
, чтобы этот запрос возвращал правильный результат?