尝试从MVC ViewModel创建视图时,获取EntityType没有定义的键错误

时间:2016-10-06 16:00:36

标签: asp.net-mvc asp.net-mvc-viewmodel

我正在开发一个ASP.NET MVC 5项目,我正在尝试从MVC View模型构建一个控制器。 ViewModel汇集了6个表,我需要在视图中显示这些表。我的理解是使用MVC ViewModels是一种在视图中显示多个表的方法。无论如何,我收到以下错误消息:

错误

运行所选代码生成器时出错:'无法检索元数据  ' PrismSmallTask​​s.ViewModels.ManageInterviewVM&#39 ;.其中一个验证错误是  在模型生成期间检测到:

ManageInterviewVM :: EntityType' ManageInterviewVM'没有定义键。 定义此EntityType的键。 ManageInterviewVMs:EntityType:EntitySet' ManageInterviewsVMs'是根据 键入' ManageInterviewVM'没有定义键。

嗯,是的,ManageInterviewVM ViewModel中没有任何键。这是因为它包含VM中模型中表示的表的列表。并且每个模型类DO都有一个列,其中包含为其定义的键。例如,这里是ManageInterviewVM:

public class ManageInterviewVM
{
    public List<FieldRecord> FieldRecords { get; set; }
    public List<TaskList> TaskLists { get; set; }
    public List<InterviewARVTreatment> InterviewARVTreatments { get; set; }
    public List<Note> Notes { get; set; }
    public List<Risk> Risks { get; set; }
    public List<Interview1> Interviews { get; set; }
}

这里是其中一个表的部分列表,因为它在模型类中定义:

public partial class TaskList
{
    [Key]
    public int ID_TaskList { get; set; }
    [Required]
    [StringLength(15)]
    public string CD_TaskListType { get; set; }
    public int? ID_Profile { get; set; }
    public int? ID_FieldRecord { get; set; }
    public int? ID_Interview { get; set; }

所以,我不知道自己错过了什么。我可以使用帮助找出出现此错误的原因以及我如何解决它。

1 个答案:

答案 0 :(得分:1)

您的ViewModel应与您的数据上下文(数据访问层)完全分离。只有您的域模型才能处理DAL。 ViewModel仅用于向视图显示特定信息。

因此,在创建ViewModel之后......您尝试创建视图。当你到达这个屏幕时:

View Creation

  1. 输入您的视图名称
  2. 选择您的模板(如果您将其保留为&#39;清空(没有型号)&#39;那么您应该能够毫无问题地创建它。)
  3. 选择特定模板和Model类(ViewModel)后,&#39;数据上下文类&#39;将自动填充您的问题所在的连接字符串(dbcontext)。
  4. 由于视图模型不应与数据访问层相关联,因此您只需删除“数据上下文类”中自动填充的内容即可。然后你应该能够创建你的视图。

    如果你陷入了认为你需要为viewmodel定义键的陷阱..那么你的viewmodel类将被添加到你的连接字符串的类(dbcontext类)..这是一个禁忌

    您需要使用域模型查询数据库..然后将这些值分配给要显示的ViewModels属性。

    希望这有帮助!