何时向WCF服务添加更多合同

时间:2013-10-23 21:14:15

标签: c# wcf oop inheritance reflection

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

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

选择 更新 插入 去掉 得到所有 GetSetByKey

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

问题是,我的一个类Part,有多种GetSetByKey方法(根据DataBaseObject参数中发送的条件填充列表)。其他类都从主键中获取,但是这一个,我需要按不同的标准获取GetSets(或列表),如Vendor,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>();
}

当我只有另外一个条件时,这种方法很有效,但是你可以看到它已经失控了。我知道我可以使用Reflection,传递字段的名称,并使用它来进行查询,但我被告知反射是非常昂贵的处理器明智。

我正在努力保持我的服务干净,因此它只有基本的SQL命令,而不是像GetPartsByVedndor()GetPartsByPurchaseOrder()那样添加特定的合同。我没有合理的理由,只是它使服务实现非常干净。

关于如何更好地做这件事是否有任何其他建议,因为除了Reflection或向服务添加新方法之外我无所适从。如果在这里使用Reflection似乎没问题,请解释什么时候不行。

0 个答案:

没有答案