C# 如何使用NHibernate在基类上映射派生属性?
我对某个映射有问题。假设我有三个评估,它们都是从一个基本的C# 如何使用NHibernate在基类上映射派生属性?,c#,sql,nhibernate,fluent-nhibernate,nhibernate-mapping,C#,Sql,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我对某个映射有问题。假设我有三个评估,它们都是从一个基本的评估中衍生出来的: public abstract class Assessment { public abstract int DamageCostTotal { get; set; } } public class IndividualAssessment { public virtual int DamageCostHouse { get; set; } public virtual int DamageC
评估中衍生出来的:
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
和Infrastructure assessment
,都有特定的损害成本,但它们都实现了基类“DamageTotalCost
,以获得一项评估的总损害成本
在我的Fluent NHibernate映射中,我映射了每个特定评估的每个损伤成本总额:
// 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);
正如您所看到的,它正确地创建了公式,但当它按
进行排序时,它只按InfrastructureAssessment属性进行排序,而不按公式进行排序。有人知道如何映射基本的DamageCostTotal
,以便此查询返回正确的结果吗?一种解决方案是在基类中映射DamageCostTotal。如果表中没有DamageCostTotal列,请创建该列。NHibernate不需要知道这个场景中的公式,这很好,因为类已经在做繁重的工作了
您的查询应生成与此类似的SQL
SELECT ..., this_.DamageCostTotal FROM Assessment this_ ORDER BY this_.DamageCostTotal
一种解决方案是在基类中映射DamageCostTotal。如果表中没有DamageCostTotal列,请创建该列。NHibernate不需要知道这个场景中的公式,这很好,因为类已经在做繁重的工作了 您的查询应生成与此类似的SQL
SELECT ..., this_.DamageCostTotal FROM Assessment this_ ORDER BY this_.DamageCostTotal
SELECT ..., this_.DamageCostTotal FROM Assessment this_ ORDER BY this_.DamageCostTotal