我的控制器中有很多重复的代码,我试图将其卸载到共享的助手类,以便我可以在一个地方更新,而不是在当前的数百个地方进行更新。
我已经将重复的代码提取到一个单独的方法,但是,我无法确定如何在没有再次调用实体框架的情况下从数据库中实际获取数据。
在给出一个非常粗略的例子之前:
class foo{
private MyDbContext db = new MyDbContext();
Public Actionresult test()
{
ViewModel.bla = new dbhelper.getbla();
ViewModel.page = db.uniquelogic.tolist();
}
后:
class dbhelper{
private MyDbContext db = new MyDbCotnext();
public bla getbla()
{
...logic here
return bla
}
共享文件(bla.cs):
android:scaleType="center"
所以,这两种方法在这里工作,我更喜欢使用第二种,因为我只需要更新一次,但是,我的问题是:
答案 0 :(得分:1)
多个Controller
类共有的逻辑可以移动到基类“BaseController
”类,因此也可以自动控制对象的生命周期:
public abstract class BaseController : Controller {
private MyDbContext _db;
protected MyDbContext DBContext {
get { return _db ?? ( _db = new MyDbContext() ); }
}
protected void PopulateViewModel(ViewModel vm) {
vm.Bla = this.DBContext.GetBla();
vm.Page = this.DBContext.UniqueLogic.ToList();
}
protected override void Dispose(bool disposing) {
if (disposing && this._db != null) {
this._db.Dispose();
this._db = null;
}
base.Dispose(disposing);
}
}
然后在你的派生控制器中:
public class SomeAreaController : BaseController {
public ActionResult Test() {
ViewModel vm = new ViewModel();
this.PopulateViewModel( vm );
// and if you still need access to a DbContext, use the inherited property:
this.DBContext.DoSomething();
return this.View( vm );
}
}