在View Models中初始化查找的最佳实践

时间:2013-04-08 16:46:52

标签: asp.net-mvc

我有地址视图模型,我曾经在视图模型创建中初始化数据库中的国家/地区列表,但是我意识到每次我在某处创建ViewModel时,国家列表从数据库中检索而不使用,所以我有三种方法可以做到这一点:

  1. 将国家/地区初始化添加到地址查看模型构造函数,非常昂贵
  2. 从控制器加载查找,然后将其分配给视图模型,然后加载视图
  3. 在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;
        } 
    }
    
  4. 你们认为这里更好的方法和看起来更自然的方法是什么?

1 个答案:

答案 0 :(得分:1)

  
      
  • 将“国家/地区”初始化添加到“地址视图模型构造函数”,非常昂贵
  •   

这很好,假设您正在传递集合而不是DbContext。

  
      
  • 从控制器加载查找,然后将其分配给视图模型,然后加载视图
  •   

这是我见过的最常见的模式。

  
      
  • 在countries属性上使用延迟加载,因此只有在需要国家/地区时才会访问数据库,例如
  •   

couples the ViewModel to the DAL,这是一件坏事。不要这样做。

相关问题