我有这个函数应该在我的数据库中调用存储过程。
存储过程需要很多参数,但实际上只需要运行其中的三个参数。
我怎样才能做到这一点我只需要用这三个来运行这个功能? 下面是工作代码,以及我认为是解决方案的想法,但事实并非如此。
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个参数调用
此外,在这种情况下,最佳做法是什么?
-----编辑------
好的,所以下面给出的答案可行,但我的SP需要90个参数,有没有办法生成这些或者我只需要自己做咕噜咕噜的工作吗?
答案 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);
}
当然,您会为arg1
,arg2
等使用长而有意义的名称。
现在,您可以使用C#语法调用扩展名来传递命名参数:
Db.Public_OrderLine_Update(arg3: ordered, arg42: originalRecordId, arg67: originalOrdered);