我有一个地址视图模型,我曾经在创建视图模型时从数据库中初始化国家列表,但是我意识到每次我在某处创建 ViewModel 时,都会从数据库中检索国家列表而不使用,所以我想通过三种方法来做到这一点:
- 将国家初始化添加到地址视图模型构造函数,非常昂贵
- 从控制器加载查找,然后将其分配给视图模型,然后加载视图
在国家属性上使用延迟加载,因此只有在需要国家时才会访问数据库,就像这样
// Lazy loading [ScriptIgnore] private IEnumerable<SelectListItem> _Countries; [ScriptIgnore] public IEnumerable<SelectListItem> Countries { get{ if (_Countries.Count() > 0) return _Countries; else { using (var db = new AllegroDMContainer()) { var rCountries = db.Countries.ToList(); _Countries = (from m in rCountries select new SelectListItem { Text = m.Name + " (" + m.ISO + ")", Value = m.ID.ToString() }); return _Countries; } } } set{ _Countries = value; } }
你们认为这里更好的方法是什么,并且看起来更自然的方法是什么?