首页 > 解决方案 > 在 Mvc ViewModel 中对模型属性执行数据库操作

问题描述

 public class CityViewModel
    {
        public List<City> GetCities { get; set; }
        public City CityDetail { get; set; }
    }

这是我的 ViewModel,我想知道它是否是直接在 Model 属性上使用数据库操作的好方法。例如

public List<City> GetCities
{
         get{
            return {some method for getting list from database};
            } 
         set
            {
            }

}

唯一的要求是我将多次需要该列表,并且我不想继续调用同一行来从任何地方的数据库访问该列表。并且只想每当我创建此视图模型的新实例时,我都可以自动获取该列表。所以是这是一个好方法吗?

标签: c#asp.net-mvc

解决方案


ViewModel 是 pocos,它们不应该能够自己访问数据库,它们也不应该能够自己访问模型,也不是 viewmodel 的责任来填充自己。理想情况下,您的数据访问层应该将您的模型映射到视图模型和模型中的视图模型

ACityViewModel应该是City具有一些更改的模型的副本,并且GetCities应该是数据访问层中的方法,例如:-

public List<CityViewModel> GetCities()
{
    var cities = cityRepository.GetAll();

    List<CityViewModel> cityViewModelList = new List<CityViewModel>();

    foreach(var city in cities)
    {
        CityViewModel cityViewModel = new CityViewModel
        {
            //map your properties
        }
        cityViewModelList.Add(cityViewModel);
    }
    return cityViewModelList;
}

然后,每当您需要城市列表时,只需调用即可,GetCities因此无需重复代码


推荐阅读