摆脱函数调用

时间:2016-08-22 08:43:03

标签: c# stored-procedures

我有这个函数应该在我的数据库中调用存储过程。

存储过程需要很多参数,但实际上只需要运行其中的三个参数。

我怎样才能做到这一点我只需要用这三个来运行这个功能? 下面是工作代码,以及我认为是解决方案的想法,但事实并非如此。

public void UpdateOrderLine(int originalRecordId,int originalOrdered,  int ordered)
{
    //Working Code

    Db.Public_OrderLine_Update(null, null, null, null, null, null, null, null, null, null, null, null, null,
        null, null, null, null, null, null, null, null, null, null, null, null, null, ordered, null, null, null,
        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
        null, null, null, null, originalOrdered, null, null, null, null, null, null, originalRecordId, null,
        null, null, null, null, null, null, null, null, null, null, null, null, null);

    //Idea

        Db.Public_OrderLine_Update(ordered: ordered, original_RecordId: originalRecordId, original_Ordered: originalOrdered);


}

当我尝试运行我的想法时,它说:

  

方法Public_OrderLine_Update有90个参数,但是用3个参数调用

Example of the Stored Procedure being executed

此外,在这种情况下,最佳做法是什么?

-----编辑------

好的,所以下面给出的答案可行,但我的SP需要90个参数,有没有办法生成这些或者我只需要自己做咕噜咕噜的工作吗?

1 个答案:

答案 0 :(得分:1)

创建一个包装器方法,逐个“分解”参数,以便您可以显式传递值,并隐式传递null

static void PublicOrderLineUpdate(
    this MyDbContext DB
,   int? arg1 = null
,   double? arg2 = null
,   string arg3 = null
,   int? arg4 = null
,   /* and so on */
,   int? arg90 = null) {
    DB.Public_Order_LineUpdate(arg1, arg2, arg3, ..., arg90);
}

当然,您会为arg1arg2等使用长而有意义的名称。

现在,您可以使用C#语法调用扩展名来传递命名参数:

Db.Public_OrderLine_Update(arg3: ordered, arg42: originalRecordId, arg67: originalOrdered);