0

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

  1. 将国家初始化添加到地址视图模型构造函数,非常昂贵
  2. 从控制器加载查找,然后将其分配给视图模型,然后加载视图
  3. 在国家属性上使用延迟加载,因此只有在需要国家时才会访问数据库,就像这样

        // 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 回答 1

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

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

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

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

  • 在国家属性上使用延迟加载,因此只有在需要国家时才会访问数据库,就像这样

将 ViewModel 与 DAL 耦合在一起,这是一件坏事。不要这样做。

于 2013-04-08T16:51:13.310 回答