我正在寻找一种方法,只有在阅读时才能加载属性。
让我以我的用例为例:
我有几个仪表板,它目前的工作方式是控制器构建DashbaordViewModel
,然后将其传递给View
,然后使用部分或全部属性。
public ActionResult Home()
{
return View(new DashboardModel(_db));
}
我的仪表板视图模型如下:
public class DashboardModel
{
private readonly DbEntities _db;
/// <summary>
/// Constructor
/// </summary>
public DashboardModel(DbEntities db)
{
_db = db;
}
[DisplayName("Number Of Subjects")]
public int NumberOfSubjects => _db.Subjects.Count();
[DisplayName("Number Of Enabled Subjects")]
public int NumberOfEnabledSubjects => _db.Subjects.Count(x => x.Enabled);
}
然后我使用视图模型在我的Razor视图中显示这些统计数据。
然而,随着DashboardModel
变得越来越大,查询变得越来越复杂,我开始意识到这是多么无效。特别是因为我通常不会在每个视图中使用所有属性。有时我将DashboardModel
传递给视图,只是为了使用1或2个属性。
所以我想知道的是,当我在视图中尝试访问该属性时,如何让PC只在DB上执行LINQ查询。
如果可能有async
版本更好。