0

我有一个简单的数据库应用程序,并且正在使用 WCF 和实体框架进行数据库交互。

在我的服务中,我有一个名为 DatabaseTable 的父类,所有其他类都继承自该类,并覆盖下面列出的方法(这些方法也在我的服务合同中并暴露给我的客户端应用程序)

选择更新插入删除GetAll GetSetByKey

这些服务中的每一个都接受一个 DatabaseTable 对象作为参数,并执行所需的操作。

问题是,我的一个类 Part 有多种 GetSetByKey 方法(根据 DataBaseObject 参数中发送的标准填充列表)。其他类都从主键中获取,但是这一类,我需要按不同的标准获取集合(或列表),如供应商、PurchaseOrderNumber、Claim、InvoiceNumber、ShipToUser 等...

我开始做的是使用下面的 if 语句

if (this.Claim == 0) // Get By PO
{
    if (string.IsNullOrEmpty(this.InvoiceNumber) && this.VendorCode == 0)
    {
        parts = (from part in context.Parts where part.PurchaseOrder == this.PurchaseOrder select part).ToList<Parts>();
    }
    else if (this.VendorCode == 0)
    {
         parts = (from part in context.Parts where part.InvoiceNumber == this.InvoiceNumber select part).ToList<Parts>();

    }
    else
    {
          parts = (from part in context.Parts where part.VendorCode == this.VendorCode select part).ToList<Parts>();
    }
}
else
{
     parts = (from part in context.Parts where part.Claim == this.Claim select part).ToList<Parts>();
}

当我只有另一种情况时,这很有效,但正如你所见,它已经失控了。我知道我可以使用反射,传递字段的名称,并使用它来进行查询,但有人告诉我反射在处理器方面确实很昂贵。

我试图保持我的服务干净,所以它只有基本的 SQL 命令,而不是添加特定的合同,如GetPartsByVedndor()or GetPartsByPurchaseOrder()。我没有合乎逻辑的理由,只是它使服务实现非常干净。

关于如何更好地做到这一点还有其他建议吗,因为除了反射或向服务添加新方法外,我不知所措。如果在这里使用反射似乎可以,请解释一下什么时候不可以。

4

0 回答 0