我使用不同的项目将我的应用程序分成几个不同的层。
- 我的 AppName.Data 项目处理我所有的数据访问(即从数据库中检索数据)。
- 我的 AppName.Models 项目包含我的应用程序所需的所有视图模型类和其他模型类。
- 我的 AppName.Web 项目只是 MVC Web 应用程序
- 我的 AppName.Services 项目处理我的所有业务逻辑以及 Web 层和数据层之间的通信。它构建视图模型、处理数据验证等。我从不使用实际的数据库对象调用控制器操作方法。我总是使用视图模型。该视图模型仅包含填充视图所需的内容。
因此,在这种情况下,如果这是一个只读视图,我会做的是创建一个 AboutPersonDisplayViewModel,如下所示:
public class AboutPersonDisplayViewModel
{
public int PersonID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string HairColor { get; set; }
}
如果它是一个可编辑的视图,我将有一个单独的视图模型,如下所示:
public class AboutPersonEditViewModel
{
public int PersonID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int HairColorID { get; set; }
public IDictionary<int, string> HairColorOptions { get; set; }
}
在数据库中,您应该在 person 和 hairColor 表之间建立关系。因此,当您构建视图模型时,您只需获取要查找的 ID 的人员,并使用该人员的信息填充 AboutPersonViewModel 并使用导航属性导航到 Person.HairColor 以获取存储的 ID 的头发颜色.
然后,当我保存时,服务层将验证数据并正确映射/保存选择的头发颜色。
我希望这有帮助