NHibernate公式使用了错误的前缀

本文关键字:错误 前缀 NHibernate | 更新日期: 2023-09-27 18:00:25

我有以下模型:

public class Transaction {
    public virtual decimal Amount { get; set; }
    public virtual decimal Tax { get; set; }
    public virtual decimal TotalAmount { get; set; }
}

TotalAmount属性映射为如下公式:

Map(x => x.TotalAmount).Formula("Amount + Tax");

然后我有两个派生类型(每个类型的表):

public class EventTransaction : Transaction {
}
public class ProductTransaction : Transaction {
    public virtual Delivery { get; set; }
}

现在,如果我进行以下查询:

var transactions = session.Query<Transaction>().ToList();

查询执行成功,但理想情况下,我希望产品交易的TotalAmount包含Delivery成本。因此,在产品映射类中,我覆盖TotalAmount,如下所示:

Map(x => x.TotalAmount).Formula("Amount + Tax + Delivery");

然而,这并没有起到作用,因为生成的SQL假定Amount和Tax字段在产品交易表中,并使用错误的别名作为字段的前缀。

我尝试使用生成的SQL中的正确别名对其进行编码。然而,尽管这对该查询有效,但我发现使用的别名与其他查询并不总是相同的,随后引发了一个错误。

如果有人能帮忙,我将不胜感激。感谢

NHibernate公式使用了错误的前缀

公式基本上是原始SQL语句(将对其进行处理以添加别名),因此您无法访问继承的属性等。但您可以编写一个SQL子选择,以满足您的需要。

(SELECT TOP 1 pt.Delivery + t.Tax + t.Amount 
FROM ProductTransaction pt 
INNER JOIN Transaction t ON pt.Id=t.Id 
WHERE pt.Id=Id)