我有地址视图模型,我曾经在视图模型创建中初始化数据库中的国家/地区列表,但是我意识到每次我在某处创建ViewModel时,国家列表从数据库中检索而不使用,所以我有三种方法可以做到这一点:
在countries属性上使用延迟加载,因此只有在需要国家/地区时才会访问数据库,例如
// 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;
}
}
你们认为这里更好的方法和看起来更自然的方法是什么?
答案 0 :(得分:1)
- 将“国家/地区”初始化添加到“地址视图模型构造函数”,非常昂贵
这很好,假设您正在传递集合而不是DbContext。
- 从控制器加载查找,然后将其分配给视图模型,然后加载视图
这是我见过的最常见的模式。
- 在countries属性上使用延迟加载,因此只有在需要国家/地区时才会访问数据库,例如
这couples the ViewModel to the DAL,这是一件坏事。不要这样做。