好吧,我会尽量让事情变得简单明了。你可能知道,我有我的数据库使用EntityFramework,然后我有我的数据库模型类被数据库初始化,然后我有我的视图模型,我有每个html控件的字段,在过去的我让我的Controller使用特定的ViewModel实例。什么时候从数据库更新ViewModel [缓存视图模型]
我的问题是,视图模型是我控制器上创建一次(任何动作)的要求,在其他时候,我总是检查它是否是空的,如果它是空然后我重建视图模型获取数据从数据库使用我的数据库模型类,这是正确的做法是正确的?所以我可以在性能上得到改善..对吧?因为我正在重复使用View Model而不是每次都创建它......?
当后台中的管理员更新某些字段时,问题就出现了。 我该如何克服这个问题?我看到如下选项:
1)我的视图模型对象上设置一个寿命(分钟/小时) 控制器内(到期一次我将它设置为null)。
2)I尝试处理CTRL + F5键组合和我控制器设置为空内部的视图模型 对象。
3)我重建视图模型每个HTTP请求到控制器(这 是如此糟糕...)
4)我在每个客户端化HTTP会话,当后台更新一个 场,每个HTTP在我的ASP.NET WebApplication的会话中获取的触发 与一些标志设置视图模型对象为null(我甚至不知道 这是可能的,但似乎是最优雅的方式,对不对?
这是我目前正在做的一个例子,但在某些情况下,我可能需要重新考虑创建视图模型(因为数据库视野改变):
[Authorize]
public class HomeController : Controller
{
private IndexViewModel indexModel;
[Authorize]
public ActionResult Index(IndexViewModel model, string lang = "en")
{
indexModel = model;
if (indexModel == null)
indexModel = new IndexViewModel();
indexModel.SelectedLanguage = lang;
return View(indexModel);
}
//more actions..
}
期待听听你的回应和反馈, 这primarly专注于性能和CPU时间的优化问题,我想我的客户有一个新的,使用我的网站清洁和快速的体验。
谢谢!
编辑:用更多的信息编辑的问题。
你是什么意思_on其他时间我总是检查它是否为null_?你是否在'Session'中存储了你的视图模型(以及为什么?)。是什么让你认为在每个请求上初始化你的视图模型是不好的? –
嗨@StephenMuecke感谢您的回复。我的意思是我做了一些像检查模型为null的东西,在这种情况下,我再次构建模型,你明白了吗?无论如何,我并没有存储模型,模型只是继续从控制器视图到视图控制器,我在我的动作方法参数中接收模型。我说初始化我的视图模型是坏的,因为我会在数据完全没有改变的情况下使用CPU ...所以我可以使用已经存在于模型视图对象中的相同字段... – TiagoM
何时何地检查它是否为null? (对不起,但你的问题没有意义) –