C# 带有数据库调用的通用操作方法mvc
我正在寻找一种方法来创建可由多个控制器继承的通用操作方法,因此我不必在MVC中为不同的控制器和表重复相同的方法。我认为这将适用于我必须经常为多个类执行的许多CRUD操作 例如,下面是我要复制的代码: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);
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代码都可以在基类中处理