Entity framework MVC4 EF外键关联导致ModelState无效

Entity framework MVC4 EF外键关联导致ModelState无效,entity-framework,asp.net-mvc-4,foreign-key-relationship,Entity Framework,Asp.net Mvc 4,Foreign Key Relationship,通过将EF与MVC4一起使用,可以指定在模型中包含外键列。虽然这通常不是建模的一部分,但它确实允许MVC4在使用实体框架选项生成带有读/写操作和视图的MVC控制器时,为外键关系自动生成带有下拉列表的视图 在这个场景中,我遇到了创建对象的问题 经过极大简化,所讨论的模型包括: 调查问卷: 问题奈里德:PK 候选人编号:FK 候选对象:关联对象 候选人: 候选ID:PK 名称:string 我遇到的问题是,在创建视图的帖子中,创建新问卷的ModelState.IsValid为false。在调

通过将EF与MVC4一起使用,可以指定在模型中包含外键列。虽然这通常不是建模的一部分,但它确实允许MVC4在使用实体框架选项生成带有读/写操作和视图的
MVC控制器时,为外键关系自动生成带有下拉列表的视图

在这个场景中,我遇到了创建对象的问题

经过极大简化,所讨论的模型包括: 调查问卷:

  • 问题奈里德:PK
  • 候选人编号:FK
  • 候选对象:关联对象
候选人:

  • 候选ID:PK
  • 名称:string
我遇到的问题是,在创建视图的帖子中,创建新问卷的
ModelState.IsValid
为false。在调查中,列出的错误是
从类型“System.String”到类型“Data.Candidate”的参数转换失败,因为没有类型转换器可以在这些类型之间转换。

ModelState.key包括
调查问卷.Candidate
以及
调查问卷.CandidateId
(有效)


我相信这很简单,但我想听听一些解决办法。viewbag仅为下拉列表设置了一个集合,并且该视图具有类型为
@model Data.questionly
的@model。由于我不知道为什么内置EF模型不喜欢MVC生成的脚手架,对于启用外键列的创建回发,我已经返回到一个更安全的解决方案(仍然很高兴听到为什么它会失败):

为特定的敏感操作(如创建)创建单个视图模型 该理论认为,使用EF域实体作为视图模型存在许多问题,包括:

  • 它们可能会暴露太多的信息或允许其他字段被发回
  • 验证文本是一个界面问题,不应该是数据模型的一部分(他们实际上建议,即使viewmodel也不是本文的位置,但我离题了)
因此,基本上我现在有一个CreateCandidateQuestionnaireVM类,它只包含为新实例选择适当值所需的字段