C# 带有数据库调用的通用操作方法mvc

C# 带有数据库调用的通用操作方法mvc,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在寻找一种方法来创建可由多个控制器继承的通用操作方法,因此我不必在MVC中为不同的控制器和表重复相同的方法。我认为这将适用于我必须经常为多个类执行的许多CRUD操作 例如,下面是我要复制的代码: public ActionResult ToggleQC(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

我正在寻找一种方法来创建可由多个控制器继承的通用操作方法,因此我不必在MVC中为不同的控制器和表重复相同的方法。我认为这将适用于我必须经常为多个类执行的许多CRUD操作

例如,下面是我要复制的代码:

public ActionResult ToggleQC(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        BACTERIA_EVW bacteria = db.BACTERIA_EVW.Find(id);
        if (bacteria == null)
        {
            return HttpNotFound();
        }
        //add/remove QC status (switch to whichever one it isn't right now)
        if (bacteria.QCOn == null) //if it hasn't been QCed
        {
            bacteria.QCOn = DateTime.Now;
            bacteria.QCBy = User.Identity.Name;
        }
        else //if it has been QCed and they are undoing it
        {
            bacteria.QCBy = null;
            bacteria.QCOn = null;
        }
        //save changes
        db.Entry(bacteria).State = EntityState.Modified;
        db.SaveChanges();
        //return updated QC status partial
        return PartialView("_QCStatus", bacteria);
    }
我需要在化学控制器中做同样的事情,但我不想重复整个过程,只改变一部分。是否可以将模型类型作为参数传递到方法中,以替换
细菌\u EVW
?我该怎么做

如果这是非常基本的事情,我道歉;我可能不知道合适的术语。我已经搜索了泛型操作方法,但没有找到任何答案,尽管有一些关于泛型控制器的东西-我是否需要创建一个泛型控制器类来包含这样的方法


非常感谢。

如果您只想删除
代码冗余
,您可以使用该方法创建
通用控制器
,并从中继承其他控制器:

 namespace BaseControllers
 {
     public class CoolController
     {
         public virtual ViewResult Get() 
         {
             var awesomeModel = new object();
             return View(awesomeModel);
         }
     }
 }
在您的子控制器中:

 public class CoolController : BaseControllers.CoolController
 {
     public override ViewResult Get() 
     {
         var ignoredResult = base.Get();
         // ViewData.Model now refers to awesomeModel
         return View("NotGet");
     }
 }

其他
CRUD
操作也会发生同样的情况。

您可能需要的是一个通用方法从您的控制器调用它Google“abstract methods”@Shekhar需要的不仅仅是“在泛型上阅读”来处理“db.BACTERIA\u EVW.Find”或保存更新…嗨,Yaser,我如何处理子控制器中的数据库调用?它“知道”awesomemodel是指我在子类中使用的模型吗?我想你也想重用db代码,如果它们有不同的db代码,那么拥有父控制器有什么意义呢。如果您关心代码重用,我建议使用带有泛型的存储库模式来避免任何代码重复,那么所有的db代码都可以在基类中处理