说我有一个从我的数据库生成的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服务器端会在考虑位置,税金,滞纳金,月球周期的情况下计算值,而上帝知道其他什么。
或者,有没有一种好的/智能的方法可以做到这一点?