在asp.net mvc中为具有一对多关系的模型创建视图模型

时间:2017-07-08 11:44:00

标签: asp.net-mvc entity-framework

我创建了两个模型名称作为公司和代理,并且它们之间应该存在一对多关系,因为每个公司可以有多个代理但每个代理与一个公司相关。这些模型如下:

    Public class Company
    {
    Public int ComapnyId {get;set;}
    Public String CompanyName{get;set;}
    Public String tell{get;set;}
    Public String Address{get;set;}
    Public virtual ICollection<Agent> Agents {get;set;}
    }

    Public Class Agent
    {
    Public int AgentId{get;set;}
    public string FName{get;set;}
    public string LName{get;set;}
    public string Mobile{get;set;}
    public int? CompanyId{get;set;}
    [ForeignKey("CompanyId")]
    public virtual Company company{get;set;} 
    }

然后我创建了View Models,但我不确定我是否正确定义它们以满足我的目标。

     public Class CompanyViewModel
     {
     Public int ComapnyId {get;set;}
     Public String CompanyName{get;set;}
     Public String tell{get;set;}
     Public String Address{get;set;}
     Public List<AgentViewModel> AgentsName {get;set;}
     }

     Public AgentViewModel
     {
     Public int AgentId{get;set;}
     public string FName{get;set;}
     public string LName{get;set;}
     public string Mobile{get;set;}
     public int? CompanyId{get;set;}
     [ForeignKey("CompanyId")]
     public string CompanyName{get;set;}
     }

确实,我希望当用户想要创建代理时,在下拉列表中显示所有公司。我有很多疑问,但第一个是

的两个属性
      Public List<AgentViewModel> AgentsName {get;set;} and 
      public string CompanyName{get;set;}

在viewmodels中为我的目标正确定义了吗?

1 个答案:

答案 0 :(得分:0)

不,不幸的是你没有正确地做到这一点。所以你成功完成的是创建两个基本上与你的模型类重复的新类,只是更改了名称以包含单词viewmodel

在这种情况下,您应该做的只是将视图传递给新的代理模型,并在viewBag中设置不同的公司列表(强制转换为selectListItems),以用作选择下拉列表以设置CompanyId的值你的代理模特。

根据您所描述的确切需要,创建视图模型没有任何理由。