ASP.NET MVC - вызывать одну и ту же хранимую процедуру из другого представления / контроллера - PullRequest
1 голос
/ 22 апреля 2019

У меня есть 5 разных контроллеров / моделей / представлений.У меня есть кнопка на каждом из этих представлений, которая будет вызывать хранимую процедуру.В зависимости от контроллера, в хранимую процедуру передается другой параметр.

Я знаю, как вызывать эту хранимую процедуру из каждого класса модели, а затем использовать ее в представлении и контроллере.Я не знаю, как создать и использовать эту хранимую процедуру в качестве общей функциональности.

Вот фрагмент того, что я сделал - в каждом классе модели я использовал модель данных ADO.NET Entity, чтобы получить хранимую процедуру вмодель.

В каждом представлении у меня есть:

<p style="margin-left: 2.5em">
    <br />
    <input type="button" style="height:40px; width: 160px;font-weight: bold;background-color:#00ffff; " value='@("Push to use stored procedure" )' onclick=" if (confirm ('Are you sure you want to do this?')){ window.location.href='@Url.Action("SPROCButton", "Controller1")' ;} " />
</p> 

В controller1:

public ActionResult SPROCButton()
{
    try
    {
        db.uspCallTables("MyDB.temp.Table1");
        return RedirectToAction("Index");
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        throw;
    }
}

В других контроллерах единственной изменяемой строкой является параметр.Нужно ли иметь эту хранимую процедуру в каждой модели, а затем вызывать ее?

Спасибо, MR

1 Ответ

0 голосов
/ 23 апреля 2019

Есть несколько способов решить эту проблему.Я предлагаю создать базовый контроллер и добавить весь общий код.

Сила наследования не будет видна во всем его великолепии в этом примере, но я думаю, что это очень поможет вам написать общий код.

public class BaseController : Controller
{
     public void callSP(string theParameter){
        db.uspCallTables(theParameter);
     }
}

тогда, ваш Controller1,следующим образом:

public class Controller1 : BaseController
{
   public ActionResult SPROCButton()
   {
      try
      {
        callSP("MyDB.temp.Table1");
        return RedirectToAction("Index");
      }
      catch (Exception e)
      {
         Console.WriteLine(e);
         throw;
      }
   }
}

Таким образом, вы можете добавить весь общий код в родительский класс (BaseController.cs).Я хочу уточнить, что я предполагаю, что «db» содержит контекст базы данных.Чтобы это работало для вас, вы должны загрузить объект "db" нового класса BaseController так же, как вы это делали в вашем Controller1.Я надеюсь, что это поможет вам.Дайте мне знать это!С уважением.

...