尝试从 MVC ViewModel 创建视图时获取 EntityType 没有定义的键错误
Getting an EntityType has no defined key error when trying to create a view from a MVC ViewModel
我正在开发一个 ASP.NET MVC 5 项目,在该项目中我试图从 MVC 视图模型构建控制器。该 ViewModel 汇集了我需要在视图中显示的 6 个表。据我了解,使用 MVC ViewModels 是在视图中显示多个表的一种方式。无论如何,我收到以下错误消息:
Error
There was an error running the selected code generator: 'Unable to retrieve metadata for
'PrismSmallTasks.ViewModels.ManageInterviewVM'. One of more validation errors were
detected during model generation:
ManageInterviewVM:: EntityType 'ManageInterviewVM' has no key defined.
Define the key for this EntityType.
ManageInterviewVMs: EntityType: EntitySet 'ManageInterviewsVMs' is based on
type 'ManageInterviewVM' that has no keys defined.
ManageInterviewVM ViewModel 中没有密钥。这是因为它由 VM 中的模型中表示的表列表组成。每个模型 classes 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; }
}
这里是模型中定义的其中一个表的部分列表 class:
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; }
所以,我不知道我错过了什么。为什么会出现此错误以及如何解决它?
您的 ViewModel 应该与您的数据上下文(数据访问层)完全分离。只有您的领域模型应该处理 DAL。 ViewModel 仅用于向视图显示特定信息。
所以在您创建 ViewModel 之后..您尝试创建您的视图。当您到达此屏幕时:
- 输入您的视图名称
- 选择您的模板(如果您将其保留为 'Empty (without model)',那么您应该能够毫无问题地创建它)。
- 一旦您选择了特定的模板和模型 class (ViewModel),'Data context class' 将自动填充您的连接字符串 (dbcontext),这就是您的问题所在。
由于视图模型不应该与数据访问层相关联,您只需删除 'Data context class' 中自动填充的内容,然后您应该能够创建视图。
如果您陷入认为需要为您的视图模型定义键的陷阱..那么您的视图模型 class 将被添加到您的连接字符串的 class (dbcontext class).. 这是一个禁忌。
您需要使用域模型查询数据库。然后将这些值分配给要显示的 ViewModel 属性。
希望对您有所帮助!
我正在开发一个 ASP.NET MVC 5 项目,在该项目中我试图从 MVC 视图模型构建控制器。该 ViewModel 汇集了我需要在视图中显示的 6 个表。据我了解,使用 MVC ViewModels 是在视图中显示多个表的一种方式。无论如何,我收到以下错误消息:
Error
There was an error running the selected code generator: 'Unable to retrieve metadata for
'PrismSmallTasks.ViewModels.ManageInterviewVM'. One of more validation errors were
detected during model generation:
ManageInterviewVM:: EntityType 'ManageInterviewVM' has no key defined.
Define the key for this EntityType.
ManageInterviewVMs: EntityType: EntitySet 'ManageInterviewsVMs' is based on
type 'ManageInterviewVM' that has no keys defined.
ManageInterviewVM ViewModel 中没有密钥。这是因为它由 VM 中的模型中表示的表列表组成。每个模型 classes 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; }
}
这里是模型中定义的其中一个表的部分列表 class:
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; }
所以,我不知道我错过了什么。为什么会出现此错误以及如何解决它?
您的 ViewModel 应该与您的数据上下文(数据访问层)完全分离。只有您的领域模型应该处理 DAL。 ViewModel 仅用于向视图显示特定信息。
所以在您创建 ViewModel 之后..您尝试创建您的视图。当您到达此屏幕时:
- 输入您的视图名称
- 选择您的模板(如果您将其保留为 'Empty (without model)',那么您应该能够毫无问题地创建它)。
- 一旦您选择了特定的模板和模型 class (ViewModel),'Data context class' 将自动填充您的连接字符串 (dbcontext),这就是您的问题所在。
由于视图模型不应该与数据访问层相关联,您只需删除 'Data context class' 中自动填充的内容,然后您应该能够创建视图。
如果您陷入认为需要为您的视图模型定义键的陷阱..那么您的视图模型 class 将被添加到您的连接字符串的 class (dbcontext class).. 这是一个禁忌。
您需要使用域模型查询数据库。然后将这些值分配给要显示的 ViewModel 属性。
希望对您有所帮助!