我正在开发一个ASP.NET MVC 5项目,我正在尝试从MVC View模型构建一个控制器。 ViewModel汇集了6个表,我需要在视图中显示这些表。我的理解是使用MVC ViewModels是一种在视图中显示多个表的方法。无论如何,我收到以下错误消息:
错误
运行所选代码生成器时出错:'无法检索元数据 ' PrismSmallTasks.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; }
所以,我不知道自己错过了什么。我可以使用帮助找出出现此错误的原因以及我如何解决它。
答案 0 :(得分:1)
您的ViewModel应与您的数据上下文(数据访问层)完全分离。只有您的域模型才能处理DAL。 ViewModel仅用于向视图显示特定信息。
因此,在创建ViewModel之后......您尝试创建视图。当你到达这个屏幕时:
由于视图模型不应与数据访问层相关联,因此您只需删除“数据上下文类”中自动填充的内容即可。然后你应该能够创建你的视图。
如果你陷入了认为你需要为viewmodel定义键的陷阱..那么你的viewmodel类将被添加到你的连接字符串的类(dbcontext类)..这是一个禁忌
您需要使用域模型查询数据库..然后将这些值分配给要显示的ViewModels属性。
希望这有帮助!