当需要额外的数据库调用时,如何扩展实体类

时间:2018-10-31 10:53:51

标签: c# sql-server entity-framework

说我有一个从我的数据库生成的Customer类。该客户可以有多个Order对象,这些对象又可以具有多个Payments和/或Cancellations。

注意:所有这些都是商业簿记软件包的一部分,我无法更改现有表,存储过程等。

数据库具有一个接受客户ID并吐出该客户应付款总额的功能,而该功能是准确获得此值的唯一方法。

因为我经常使用此Customer对象,并且几乎总是需要该数量,所以我想扩展该对象并将其作为属性添加(以便我可以直接绑定到它)。

一个问题是,据我所知,我的Customer对象实际上并不了解数据库上下文,这意味着即使已有一个上下文,我也必须创建另一个上下文来调用我的存储过程。

为解决这个问题,我将Entity类扩展为具有一个名为Connection的静态DbConnection字段,该字段在实例化该类时就会填充。

所以,现在,我的代码看起来像这样……

public partial class Customer
{
    private double? amountDue;
    public double AmountDue
    {
        if (amountDue.HasValue == false)
        {
            if (Entities.Connection != null && string.IsNullOrEmpty(Entities.Connection.ConnectionString) == false)
            {
                using (var context = new Entities(Entities.Connection))
                {
                    amountDue = context.CalculateOutstanding(this.CustomerID);
                }
            }
        }

        return amountDue.HasValue ? amountDue.Value : 0;
    }
}

这可行,但是是否有更好/更智能/更有效的方式来做到这一点?我知道在属性获取器中进行数据库调用是很烦人的,但是如果不返回数据库就无法获得此值。该函数实际上调用dll服务器端,该DLL服务器端会在考虑位置,税金,滞纳金,月球周期的情况下计算值,而上帝知道其他什么。

或者,有没有一种好的/智能的方法可以做到这一点?

0 个答案:

没有答案