C# 如何在MVC实体框架中向存储过程添加多个参数?

C# 如何在MVC实体框架中向存储过程添加多个参数?,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我将VS2012与MVC4和EntityFramework一起使用 我需要一个建议如何以良好的方式向存储过程添加多个参数。我使用下面的代码,但我认为这不是编写代码的好方法,如果有人知道更好的方法,请分享 如果我的存储过程参数大于10,则看起来不太好 我的行动方法 公共操作结果保存凭证(凭证项目) { 列出LastCouponId=db.MVC\u GetMaxCouponMasterByDept( items.vDeptCode, items.vComp, 项目。vFinYear, items.

我将VS2012与MVC4和EntityFramework一起使用

我需要一个建议如何以良好的方式向存储过程添加多个参数。我使用下面的代码,但我认为这不是编写代码的好方法,如果有人知道更好的方法,请分享

如果我的存储过程参数大于10,则看起来不太好

我的行动方法

公共操作结果保存凭证(凭证项目)
{
列出LastCouponId=db.MVC\u GetMaxCouponMasterByDept(
items.vDeptCode,
items.vComp,
项目。vFinYear,
items.vLoc,
项目成本中心
).ToList();
返回视图();
}

SP代码应该在一个helper类中,该类接受参数,而不是直接在ActionMethod中,这样它就可以重用

PS这还不完整,我不打算为你写全部,但这应该会对你有所帮助

由于这个问题的性质,范围可能会越来越大,也就是说,有一百万种方法可以进一步重构这个问题。。。。所以我建议你多读一些关于设计模式的书,因为它们会帮助你完成任务

public ActionResult SaveVoucher(Voucher items)
{
    SpHelper spHelper = new SpHelper();
    var data  = spHelper.GetMaxCouponMasterByDept(item.vDeptCode);
    return View(data);
}


//this is in its own class file..
public class SpHelper
{
     private DbContext db = new DbContext()
     public List<MVC_GetMaxCouponMasterByDept_Result> GetMaxCouponMasterByDept(string vDeptCode)
     {
         var data = db.MVC_GetMaxCouponMasterByDept(
                    vDeptCode,"CCL", "2015-2016",
                  "Mumbai","10001554"
                  ).ToList();
          return data;
     }

     //... other helpful Sp you have created
}
公共操作结果保存凭证(凭证项目)
{
SpHelper SpHelper=新SpHelper();
var data=spHelper.GetMaxCouponMasterByDept(item.vDeptCode);
返回视图(数据);
}
//这在它自己的类文件中。。
公共级滑石机
{
private DbContext db=new DbContext()
公共列表GetMaxCouponMasterByDept(字符串vDeptCode)
{
var data=db.MVC\u GetMaxCouponMasterByDept(
vDeptCode,“CCL”,“2015-2016”,
“孟买”,“10001554”
).ToList();
返回数据;
}
//…您创建的其他有用的Sp
}

@MegaTron是的,但我本来打算采用依赖注入的方法,但它远远超出了这个范围…这就是为什么我更新了。。。建议他查一下设计patterns@MegaTron怎样?这不是更好吗。请解释这一评论。如果你能理解这些坚实的原则,那就好多了。。。我不想走得太快!。。。否则我就得为他写一整本类库。我对你的答案感兴趣。@威震天和你的静态实例请解释上下文的生命周期?冷静。了解实用程序模式。如果代码只在一个地方使用,那么创建一个helper类是没有意义的。在另一种情况下,如果代码应该是可重用的,那么您的helper类是完全错误的。我认为传递给过程的所有参数都不应该是statis,而应该总是改变。在这种情况下,您可以硬编码公共类中的参数值。这意味着程序将始终以相同的值运行,如“孟买”、“10001554”等。您认为硬编码参数值正确吗?“可重复使用的呢?”威震天请重读我说的话。(我想你漏掉了粗体部分)我还没有看到你的答案。。你也没有解释你是如何处理生命周期的。礼貌通常是赢得的…从说“只是另一种方式,但不是更好”开始,就像我说你只是想礼貌和专业。我在陈述我的情况,为什么我不认为这是一样的,我只是问你在没有贡献任何东西的情况下是如何得出这个结论的。这是一个好方法,但尽量不要使用字符串文字,使用常量。这只是一个例子。是的,我将使用常量。。,但在这里,我想知道如何以更好的方式将参数添加到存储过程中,为什么您认为这不是更好的方式?
public ActionResult SaveVoucher(Voucher items)
{
    SpHelper spHelper = new SpHelper();
    var data  = spHelper.GetMaxCouponMasterByDept(item.vDeptCode);
    return View(data);
}


//this is in its own class file..
public class SpHelper
{
     private DbContext db = new DbContext()
     public List<MVC_GetMaxCouponMasterByDept_Result> GetMaxCouponMasterByDept(string vDeptCode)
     {
         var data = db.MVC_GetMaxCouponMasterByDept(
                    vDeptCode,"CCL", "2015-2016",
                  "Mumbai","10001554"
                  ).ToList();
          return data;
     }

     //... other helpful Sp you have created
}